Pagini recente » Cod sursa (job #2835119) | Cod sursa (job #919767) | Cod sursa (job #2635309) | Cod sursa (job #514385) | Cod sursa (job #345498)
Cod sursa(job #345498)
#include <stdio.h>
#define DIM 1000000
int n, m, tata[DIM], rang[DIM];
int find(int k)
{
int r;
for (r=k; r!=tata[r]; r=tata[r]);
while (tata[k]!=k)
{
int tmp=tata[k];
tata[k]=r;
k=tmp;
}
return r;
}
void unite(int k, int l)
{
if (rang[k]>rang[l])
tata[l]=k;
else
tata[k]=l;
if (rang[k]==rang[l])
rang[l]++;
}
int main()
{
int i, x, y, op;
freopen ("disjoint.in","r",stdin);
freopen ("disjoint.out","w",stdout);
scanf("%d%d",&n,&m);
for (i=1; i<=n; ++i)
{
tata[i]=i;
rang[i]=1;
}
for (i=1; i<=m; ++i)
{
scanf("%d%d%d",&op,&x,&y);
if (op==2)
if (find(x)==find(y)) printf("DA\n");
else printf("NU\n");
else
{
unite (find(x), find(y));
}
}
return 0;
}