Cod sursa(job #830893)
#include<stdio.h>
int t[100005],h[100005];
int find(int x)
{
if(t[x]==x)
return x;
return find (t[x]);
}
int unite(int u,int v)
{
if(u==v)
return 0;
else
if(h[u]==h[v])
{
t[v]=u;
h[u]++;
}
else
if(h[u]<h[v])
t[u]=v;
else
t[v]=u;
}
int main()
{
freopen("disjoint.in","r",stdin);
freopen("disjoint.out","w",stdout);
int n,m,i,j,cod,x,y,z,v;
scanf("%d%d",&n,&m);
for(i=1;i<=n;i++)
t[i]=i;
for(i=1;i<=m;i++)
{
scanf("%d%d%d",&cod,&x,&y);
if(cod==1)
unite(x,y);
else
{
z=find(x);
v=find(y);
if(z==v)
printf("DA\n");
else
printf("NU\n");
}
}
return 0;
}