Cod sursa(job #636427)
#include <stdio.h>
#include <math.h>
long n, m, i, a, b, c, tata[100010];
inline long parc(long nod, long o) {
if (tata[nod]) parc(tata[nod], 1);
else {
long aux = nod;
if (o == 1) tata[nod] = aux;
return aux;
}
}
int main() {
freopen("disjoint.in", "r", stdin);
freopen("disjoint.out", "w", stdout);
scanf("%ld %ld", &n, &m);
for (i = 1; i <= m; ++i) {
scanf("%ld", &c);
scanf("%ld %ld", &a, &b);
if (c == 1) {
long A = parc(a, 0);
long B = parc(b, 0);
tata[B] = A;
}
if (c == 2) {
if (parc(a, 0) == parc(b, 0)) {
printf("DA\n");
} else {
printf("NU\n");
}
parc(a, 1);
parc(b, 1);
}
}
return 0;
}