Cod sursa(job #576915)

Utilizator BalcauIonutFMI-Balcau Ionut BalcauIonut Data 9 aprilie 2011 17:06:07
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.83 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;
            else t[r1]=r2;
            if(r[r1]==r[r2]) ++r[r1];

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