Pagini recente » Cod sursa (job #1441074) | Cod sursa (job #2434952) | Cod sursa (job #2371392) | Cod sursa (job #450429) | Cod sursa (job #633899)
Cod sursa(job #633899)
#include <stdio.h>
#define NMAX 10010
int father[NMAX], rank[NMAX];
int find(int x)
{
int R, y;
for (R = x; R != father[R]; R = father[R]);
for ( ; x != father[x]; ) {
y = father[x];
father[x] = R;
x = y;
}
return R;
}
void unite(int x, int y)
{
if (rank[x] > rank[y])
father[y] = x;
else
father[x] = y;
if (rank[x] == rank[y])
++rank[y];
}
int main()
{
freopen("disjoint.in", "r", stdin);
freopen("disjoint.out", "w", stdout);
int n, m, i;
int x, y, code;
scanf("%d %d", &n, &m);
for (i=1; i<=n; ++i) {
father[i] = i;
rank[i] = 1;
}
for (i=1; i<=m; ++i) {
scanf("%d %d %d", &code, &x, &y);
if (code == 2) {
if (find(y) == find(x))
printf("DA\n");
else
printf("NU\n");
}
else
unite(find(x), find(y));
}
return 0;
}