Pagini recente » Cod sursa (job #1556938) | Cod sursa (job #163513) | Cod sursa (job #778746) | Cod sursa (job #30184) | Cod sursa (job #291451)
Cod sursa(job #291451)
#include <stdio.h>
#define dim 100100
int rg[dim], tt[dim], n, m;
int find(int x)
{
int r, y;
for (r=x; r!=tt[r]; r=tt[r]);
while (x!=r)
{
y=tt[x];
tt[x]=r;
x=y;
}
return r;
}
void unite(int x, int y)
{
if (rg[x]>rg[y]) tt[y]=x;
else tt[x]=y;
if (rg[x]==rg[y]) rg[y]++;
}
int main()
{
int op, x, y, i;
freopen("disjoint.in", "r", stdin);
freopen("disjoint.out", "w", stdout);
scanf("%d %d\n", &n, &m);
for (i=1; i<=n; i++)
{
rg[i]=1;
tt[i]=i;
}
for (; m; m--)
{
scanf("%d %d %d\n", &op, &x, &y);
if (op==1)
if (find(x)!=find(y)) unite(find(x), find(y));
else return -1;
else
if (find(x)==find(y)) printf("DA\n");
else printf("NU\n");
}
return 0;
}