Cod sursa(job #573672)
#include <fstream>
using namespace std;
const int N=100005;
const char rasp[][6]={"NU\n","DA\n"};
int v[N],size[N];
ifstream in("disjoint.in");
ofstream out("disjoint.out");
inline int varf(int x)
{
if (!v[x])
return x;
v[x]=varf(v[x]);
return v[x];
}
int main()
{
int x,y,a,b,n,m;
in>>n>>m;
for (int i=1;i<=n;i++)
size[i]=1;
while (m--)
{
in>>x;
if (x==1)
{
in>>x>>y;
a=varf(x);
b=varf(y);
if (a==b)
continue;
if (size[a]>size[b])
{
v[b]=a;
size[a]+=size[b];
}
else
{
v[a]=b;
size[b]+=size[a];
}
continue;
}
in>>x>>y;
out<<rasp[varf(x)==varf(y)];
}
return 0;
}