Cod sursa(job #576907)

Utilizator BalcauIonutFMI-Balcau Ionut BalcauIonut Data 9 aprilie 2011 17:00:31
Problema Paduri de multimi disjuncte Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 0.9 kb
#include<cstdio>
using namespace std;
int t[100001],r[100001];

int root(int x){
    if(t[x]==x)
        return x;
    else{
        t[x]=root(t[x]);
        return t[x];
    }
}

int main(){
    freopen("disjoint.in","r",stdin);
    freopen("disjoint.out","w",stdout);
    int n,m,i,tip,x,y,r1,r2;
    scanf("%d %d",&n,&m);
    for(i=1;i<=n;++i)
        { t[i]=i; r[i]=0; }
    for(i=0;i<m;++i)
    { scanf("%d %d %d",&tip,&x,&y);
        if(tip==1){
            r1=root(x);
            r2=root(y);
            if(r[r1]==r[r2]){
                t[r2]=r1;
                r[r1]++;
            }
            else
                if(r[r1]>r[r2]) t[r2]=r1;
                else r[r1]=r2;

        }
        else{
            r1=root(x);
            r2=root(y);
            if(r1==r2)
                printf("DA\n");
            else printf("NU\n");
        }
    }
    return 0;
}