Cod sursa(job #420758)
#include <cstdio>
const int N = 100001;
int tata[N],n;
int radacina(int x)
{
if (tata[x] == 0)
return x;
tata[x] = radacina(tata[x]);
return tata[x];
}
void reuniune(int rad1, int rad2)
{
tata[rad2] = rad1;
}
bool aceeasi_multime(int x, int y)
{
return radacina(x)==radacina(y);
}
void citire()
{
int m,op,x,y;
scanf("%d%d",&n,&m);
for (int i = 1; i <= m; ++i)
{
scanf("%d%d%d",&op,&x,&y);
if (op == 1)
reuniune(radacina(x),radacina(y));
if (op == 2)
printf(aceeasi_multime(x,y)?"DA\n":"NU\n");
}
}
int main()
{
freopen("disjoint.in","r",stdin);
freopen("disjoint.out","w",stdout);
citire();
return 0;
}