Pagini recente » Cod sursa (job #1943670) | Borderou de evaluare (job #84868) | Cod sursa (job #1607010)
#include <iostream>
#include <stdio.h>
using namespace std;
int h[100001],tata[100001];
int gaseste(int x)
{int t=x,p;
while(x!=tata[x])
{
x=tata[x];
}
while(t!=tata[t])
{
p=tata[t];
tata[t]=x;
t=p;
}
return x;
}
void uni(int x,int y)
{
int a=gaseste(x),b=gaseste(y);
if(h[a]<h[b])tata[x]=b;
else
{
if(h[a]==h[b]){h[a]++;tata[y]=a;}
else tata[y]=a;
}
}
int main()
{freopen("disjoint.in","r",stdin );
freopen("disjoint.out","w",stdout);
int n,i,j,q,t,x,y,a,b;
scanf("%d%d",&n,&t);
for(i=1;i<=n;i++){h[i]=1;tata[i]=i;}
for(j=0;j<t;j++)
{
scanf("%d%d%d",&q,&x,&y);
if(q==1)
uni(x,y);
else
{
a=gaseste(x);
b=gaseste(y);
if(a==b)printf("DA\n");
else printf("NU\n");
}
}
return 0;
}