Cod sursa(job #1486186)

Utilizator DeltaMTP Dragos DeltaM Data 14 septembrie 2015 01:23:59
Problema Paduri de multimi disjuncte Scor 70
Compilator cpp Status done
Runda Arhiva educationala Marime 0.92 kb
#include<cstdio>
int n,m,i,j,p,a,b,ra,rb,d[100100];
FILE *f,*g;
int rad(int a){
    while(d[a]>0){
        a=d[a];
    }
    return a;
}
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",&p,&a,&b);
        if(p==2){
            ra=rad(a);
            rb=rad(b);
            if(ra==rb)
                fprintf(g,"DA\n");
            else
                fprintf(g,"NU\n");
        }
        else{
            ra=rad(a);
            rb=rad(b);
            if(ra==rb)
                continue;
            if(ra<rb){
                d[ra]=d[ra]+d[rb];
                d[rb]=ra;
            }
            else{
                d[rb]=d[rb]+d[ra];
                d[ra]=rb;
            }
        }
    }


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