Cod sursa(job #1019869)

Utilizator TarabanDragosTaraban Dragos-Petru TarabanDragos Data 1 noiembrie 2013 01:02:10
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.8 kb
#include<cstdio>
int n,m,v[100001],op,a,b,ra,rb,i;
FILE *f,*g;
int rad(int x){
    while(v[x]>0)
        x=v[x];
    return x;
}
int main(){
    f=fopen("disjoint.in","r");
    g=fopen("disjoint.out","w");
    fscanf(f,"%d%d",&n,&m);
    for(i=1;i<=n;i++){
        v[i]=-1;
    }
    for(i=1;i<=m;i++){
        fscanf(f,"%d%d%d",&op,&a,&b);
        ra=rad(a);
        rb=rad(b);
        if(op==2){
            if(ra==rb)
                fprintf(g,"DA\n");
            else
                fprintf(g,"NU\n");
        }
        else{
            if(v[ra]>v[rb]){
                v[ra]+=v[rb];
                v[ra]=rb;
            }
            else{
                v[rb]+=v[ra];
                v[rb]=ra;
            }
        }
    }
    fclose(f);
    fclose(g);
    return 0;
}