Pagini recente » Cod sursa (job #2175105) | Cod sursa (job #146526) | Cod sursa (job #619862) | Cod sursa (job #2604505) | Cod sursa (job #1607577)
#include <stdio.h>
using namespace std;
long S[200001],F[200001],n,m,k,x,y,i;
int Father(int x)
{
int y=x,t;
while (F[y]!=y)
y=F[y];
while (F[x]!=x)
{
t=F[x];
F[x]=y;
x=t;
}
return y;
}
int Size(int x)
{
return S[Father(x)];
}
void Join(int x, int y)//size(x)>=size(y) , join y->x
{
int t1,t2;
t1=Father(x);
t2=Father(y);
if (S[t1]>=S[t2])
{
F[t2]=t1;
S[t1]+=S[t2];
S[t2]=0;
}
else
{
F[t1]=t2;
S[t2]+=S[t1];
S[t1]=0;
}
}
int main()
{
freopen ("disjoint.in","r",stdin);
freopen ("disjoint.out","w",stdout);
scanf ("%ld%ld",&n,&m);
for (i=1;i<=n;i++)
F[i]=i,S[i]=1;
for (i=1;i<=m;i++)
{
scanf ("%ld %ld %ld",&k,&x,&y);
if (k==2)
if (Father(x)==Father(y))
printf ("DA\n");
else
printf ("NU\n");
else
Join(x,y);
}
return 0;
}