Cod sursa(job #2170514)

Utilizator tudortarniceruTudor Tarniceru tudortarniceru Data 15 martie 2018 02:54:54
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.05 kb
#include <fstream>
#include <cstring>
#include <algorithm>
using namespace std;

ifstream fin("disjoint.in");
ofstream fout("disjoint.out");

const int MAXN = 100005;
int n, m;
int v[MAXN], r[MAXN];

int find(int k) {
    if (v[k] != k) {
        v[k] = find(v[k]);
    }
    return v[k];
}

void unite(int x, int y) {
    int px = find(x);
    int py = find(y);
    if (r[px] > r[py]) {
        v[py] = px;
    }
    else if (r[px] < r[py]) {
        v[px] = py;
    }
    else {
        v[px] = v[py];
        r[py]++;
    }
}

int main() {

    fin >> n >> m;
    for (int i = 1; i <= n; ++i) {
        v[i] = i;
        r[i] = 1;
    }
    for (int i = 1; i <= m; ++i) {
        int q, x, y;
        fin >> q >> x >> y;
        if (q == 1) {
            unite(x, y);
        }
        else {
            if (find(x) == find(y)) {
                fout << "DA";
            }
            else {
                fout << "NU";
            }
            fout << '\n';
        }
    }

    fout.close();
    return 0;
}