Cod sursa(job #1817344)

Utilizator retrogradLucian Bicsi retrograd Data 27 noiembrie 2016 17:48:28
Problema Paduri de multimi disjuncte Scor 40
Compilator cpp Status done
Runda Arhiva educationala Marime 0.68 kb
#include <bits/stdc++.h>

using namespace std;

int Link[1000000];
int Find(int a) {
    while(Link[a]) a = Link[a];
    return a;
}
void Union(int a, int b) {
    a = Find(a);
    b = Find(b);
    
    if(a != b) {
        if(rand() % 2) Link[a] = b;
        else Link[b] = a;
    }
}

int main() {
    freopen("disjoint.in", "r", stdin);
    freopen("disjoint.out", "w", stdout);
    srand(time(0));
    int n, m;
    cin >> n >> m;
    
    while(m--) {
        int op, a, b;
        cin >> op >> a >> b;
        if(op == 1) {
            Union(a, b);
        } else {
            cout << ((Find(a) == Find(b)) ? "DA\n" : "NU\n");
        }
    }
    return 0;
}