Cod sursa(job #850617)

Utilizator Mitza444Vidrean Mihai Mitza444 Data 8 ianuarie 2013 17:34:11
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.86 kb
#include<cstdio>
using namespace std;
#define MAX 100001
int T[MAX],G[MAX];
int find(int x){
    int R,aux;
    for(R=x;T[R]!=R;R=T[R]);
    while(T[x]!=x){
        aux=T[x];
        T[x]=R;
        x=aux;
    }
    return R;
}
void uneste(int x,int y){
    if(G[x]>G[y])
        T[y]=x;
    else
        T[x]=y;
    if(G[x]==G[y])
        G[y]++;
}
int main(){
    int c,x,y,n,m,i;
    freopen("disjoint.in","r",stdin);
    scanf("%d%d",&n,&m);
    for(i=1;i<=n;i++)
        T[i]=G[i]=i;
    freopen("disjoint.out","w",stdout);
    for(i=1;i<=m;i++){
        scanf("%d%d%d",&c,&x,&y);
        if(c==1)
            uneste(find(x),find(y));
        else{
            if(find(x)==find(y))
                printf("DA\n");
            else
                printf("NU\n");
        }
    }
    fclose(stdin);
    fclose(stdout);
    return 0;
}