Cod sursa(job #1147241)
| Utilizator | Data | 19 martie 2014 18:00:44 | |
|---|---|---|---|
| Problema | Paduri de multimi disjuncte | Scor | 70 |
| Compilator | cpp | Status | done |
| Runda | Arhiva educationala | Marime | 0.85 kb |
#include<cstdio>
int n,m,i,j,d[100100],op,a,b,na,nb;
FILE *f,*g;
int rad(int r){
while(d[r]>0){
r=d[r];
}
return r;
}
int main(){
f=fopen("disjoint.in","r");
g=fopen("disjoint.out","w");
fscanf(f,"%d%d",&n,&m);
for(i=1;i<=m;i++){
fscanf(f,"%d%d%d",&op,&a,&b);
if(op==2){
na=rad(a);
nb=rad(b);
if(na==nb)
fprintf(g,"DA\n");
else
fprintf(g,"NU\n");
}
else{
na=rad(a);
nb=rad(b);
if(d[na]>d[nb]){
d[na]=d[na]+d[nb];
d[nb]=na;
}
else{
d[nb]=d[nb]+d[na];
d[na]=nb;
}
}
}
fclose(f);
fclose(g);
return 0;
}
