Cod sursa(job #282779)
| Utilizator | Data | 18 martie 2009 11:05:08 | |
|---|---|---|---|
| Problema | Paduri de multimi disjuncte | Scor | 10 |
| Compilator | cpp | Status | done |
| Runda | Arhiva educationala | Marime | 0.93 kb |
#include <stdio.h>
#define Nmax 100001
int n,m,mul[Nmax],op,r[Nmax],x,y;
void unesc(int x,int y)
{
if(r[x]>r[y])
mul[y]=x;
else
mul[x]=y;
if(r[x]==r[y])
++r[y];
}
int find(int x)
{
if(mul[x]==x)
return x;
else
mul[x]=find(mul[x]);
return mul[x];
}
int main()
{
int i;
freopen("disjoint.in","r",stdin);
freopen("disjoint.out","w",stdout);
scanf("%d%d",&n,&m);
for(i=1;i<=n;++i)
{
mul[i]=i;
}
for(i=1;i<=m;++i)
{
scanf("%d%d%d",&op,&x,&y);
if(op==1)
unesc(x,y);
else
if(find(x)==find(y))
printf("DA\n");
else
printf("NU\n");
}
return 0;
}
