Cod sursa(job #779725)
Utilizator | Data | 18 august 2012 17:04:35 | |
---|---|---|---|
Problema | Paduri de multimi disjuncte | Scor | 100 |
Compilator | cpp | Status | done |
Runda | Arhiva educationala | Marime | 0.49 kb |
#include <stdio.h>
#define NMax 100010
const char IN[]="disjoint.in",OUT[]="disjoint.out";
int N,M;
int P[NMax];
int find(int x){
if (x==P[x]) return x;
return (P[x]=find(P[x]));
}
int main()
{
int i,c,x,y;
freopen(IN,"r",stdin);
scanf("%d%d",&N,&M);
for (i=1;i<=N;++i) P[i]=i;
freopen(OUT,"w",stdout);
while (M--)
{
scanf("%d%d%d",&c,&x,&y);
if (c==1)
P[find(x)]=P[find(y)];
else
printf("%s\n",find(x)==find(y) ? "DA" : "NU");
}
fclose(stdout);
fclose(stdin);
return 0;
}