Pagini recente » Cod sursa (job #1494763) | Cod sursa (job #276694) | Cod sursa (job #97624) | Cod sursa (job #2822408) | Cod sursa (job #1541395)
#include <cstdio>
#define NMAX 100005
int p[NMAX], h[NMAX];
int N, M;
void init (int n) {
for (int i = 1; i <= n; i++) {
p[i] = i;
h[i] = 1;
}
}
int finddj (int x) {
int r = x;
while (p[r] != r) {
r = p[r];
}
while (p[x] != r) {
int tmp = p[x];
p[x] = r;
x = tmp;
}
return r;
}
void uniondj (int x, int y) {
int rx = finddj (x), ry = finddj (y);
if (rx != ry) {
if (h[rx] < h[ry]) {
p[rx] = ry;
}
else {
if (h[rx] > h[ry]) {
p[ry] = rx;
}
else {
p[rx] = ry;
h[ry]++;
}
}
}
}
int main () {
freopen ("disjoint.in", "r", stdin);
freopen ("disjoint.out", "w", stdout);
scanf ("%d%d", &N, &M);
init (N);
int cerinta, x, y;
while (M--) {
scanf ("%d%d%d", &cerinta, &x, &y);
if (cerinta == 1) {
uniondj (x, y);
}
else {
if (finddj (x) == finddj (y)) {
printf ("DA\n");
}
else {
printf ("NU\n");
}
}
}
return 0;
}