Cod sursa(job #661777)
#include <stdio.h>
int tata[100100],v[100100],n,m;
int caut(int &a)
{
while (a!=tata[a])
a=tata[a];
return a;
}
void re(int x, int y)
{ if (v[x]<v[y]) tata[x]=y;
else tata[y]=x;
if (v[x]==v[y]) v[x]++;
}
int main()
{ int i,x,y,c;
FILE* f=fopen("disjoint.in","r");
FILE* g=fopen("disjoint.out","w+");
fscanf(f,"%d %d",&n,&m);
for (i=1;i<=n;i++)
tata[i]=i;
for (i=1;i<=m;i++)
{fscanf(f,"%d %d %d",&c,&x,&y);
if (c==1) re(caut(x),caut(y));
else
if (caut(x)==caut(y)) fprintf(g,"DA\n");
else fprintf(g,"NU\n");}
fclose(f);
fclose(g);
return 0;
}