Cod sursa(job #636241)

Utilizator CS-meStanca Marian Ciprian CS-me Data 19 noiembrie 2011 18:02:48
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.07 kb
#include<stdio.h>
FILE *fin=fopen("disjoint.in","r");
FILE *fout=fopen("disjoint.out","w");

int n,m,x,y,i,cod,t[100010],rx,ry;

int main(){

    fscanf(fin,"%d %d",&n,&m);

    for(i=1;i<=n;i++){
        t[i]=-1;
    }

    for(i=1;i<=m;i++){
        fscanf(fin,"%d %d %d",&cod, &x, &y);

        if(cod==1){ // asociere
            rx=x;
            while( t[rx]>0 ){
                rx=t[rx];
            }
            ry=y;

            while(t[ry]>0){
                ry=t[ry];
            }

            if(t[rx]<t[ry]){
                t[rx]+=t[ry];
                t[ry]=rx;
            }
            else{
                t[ry]+=t[rx];
                t[rx]=ry;
            }
        }
        else{   // query
            rx=x;
            while(t[rx]>0){
                rx=t[rx];
            }

            ry=y;
            while(t[ry]>0){
                ry=t[ry];
            }

            if(rx==ry){
                fprintf(fout,"DA\n");
            }
            else fprintf(fout,"NU\n");

        }
    }

return 0;
}