Cod sursa(job #742632)

Utilizator StrajanStrajan Sebastian Ioan Strajan Data 30 aprilie 2012 21:39:25
Problema Paduri de multimi disjuncte Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.88 kb
#include <algorithm>
#define DIM 100005
using namespace std;

int n, m, r[DIM], t[DIM];

int find(int x){
    if (x != t[x])
        t[x] = find(t[x]);
    return t[x];
}

void unite(int x,int y){
    if (r[x] > r[y]){
        t[y] = x;
        r[x] += r[y];
    }
    else{
        t[x] = y;
        r[y] += r[x];
    }
}

void solve(){
    int i, tip, x, y;

    for (i = 1; i <= n; i++){
        t[i] = i;
        r[i] = 1;
    }
    for (i = 1; i <= m; i++){
        scanf("%d%d%d", &tip, &x, &y);
        if (tip == 1)
            unite(find(x), find(y));
        else
            if (find(x) == find(y))
                printf("DA\n");
            else
                printf("NU\n");
    }
}

int main (){
    freopen("disjoint.in", "r", stdin);
    freopen("disjoint.out", "w", stdout);

    scanf("%d%d", &n, &m);
    solve();

    return 0;
}