Cod sursa(job #803139)

Utilizator CS-meStanca Marian Ciprian CS-me Data 27 octombrie 2012 09:29:14
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.04 kb
#include<stdio.h>
FILE *fin=fopen("disjoint.in","r");
FILE *fout=fopen("disjoint.out","w");

int n,m,a,b,i,tip,t[100010],ra,rb;


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

int main(){

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

    init();

    for(i=1;i<=m;i++){
        fscanf(fin,"%d %d %d",&tip, &a, &b);
        if(tip==1){ // asociere
            ra=a;
            while( t[ra]>0 ){
                ra=t[ra];
            }
            rb=b;
            while(t[rb]>0){
                rb=t[rb];
            }
            if(t[ra]<t[rb]){
                t[ra]+=t[rb];
                t[rb]=ra;
            }
            else{
                t[rb]+=t[ra];
                t[ra]=rb;
            }
        }
        else{   // querb
            ra=a;
            while(t[ra]>0){
                ra=t[ra];
            }
            rb=b;
            while(t[rb]>0){
                rb=t[rb];
            }
            if(ra==rb){
                fprintf(fout,"DA\n");
            }
            else fprintf(fout,"NU\n");
        }
    }

return 0;
}