Cod sursa(job #1147251)

Utilizator TarabanDragosTaraban Dragos-Petru TarabanDragos Data 19 martie 2014 18:06:33
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.93 kb
#include<cstdio>
int n,m,i,j,d[100100],op,a,b,na,nb;
FILE *f,*g;
int rad(int r){
    while(d[r]>0){
        r=d[r];
    }
    return r;
}
int main(){
    f=fopen("disjoint.in","r");
    g=fopen("disjoint.out","w");
    fscanf(f,"%d%d",&n,&m);
    for(i=1;i<=n;i++){
        d[i]=-1;
    }
    for(i=1;i<=m;i++){
        fscanf(f,"%d%d%d",&op,&a,&b);
        if(op==2){
            na=rad(a);
            nb=rad(b);
            if(na==nb)
                fprintf(g,"DA\n");
            else
                fprintf(g,"NU\n");
        }
        else{
            na=rad(a);
            nb=rad(b);
            if (na == nb)
                continue;
            if(d[na]<d[nb]){
                d[na]=d[na]+d[nb];
                d[nb]=na;
            }
            else{
                d[nb]=d[nb]+d[na];
                d[na]=nb;
            }
        }
    }

    fclose(f);
    fclose(g);
    return 0;
}