Cod sursa(job #1692363)
| Utilizator | Data | 20 aprilie 2016 19:06:01 | |
|---|---|---|---|
| Problema | Paduri de multimi disjuncte | Scor | 100 |
| Compilator | cpp | Status | done |
| Runda | Arhiva educationala | Marime | 0.58 kb |
#include <cstdio>
#define MAXN 100000
int sef[MAXN+1];
int find(int x){
if(sef[x]==0)
return x;
return sef[x]=find(sef[x]);
}
int main(){
FILE*fi,*fout;
int n,m,t,x,y,i;
fi=fopen("disjoint.in" ,"r");
fout=fopen("disjoint.out" ,"w");
fscanf(fi,"%d%d" ,&n,&m);
for(i=0;i<m;i++){
fscanf(fi,"%d%d%d" ,&t,&x,&y);
if(t==1)
sef[find(x)]=find(y);
else{
if(find(x)==find(y))
fprintf(fout,"DA\n");
else
fprintf(fout,"NU\n");
}
}
fclose(fi);
fclose(fout);
return 0;
}
