Pagini recente » Cod sursa (job #718445) | Cod sursa (job #1672991) | Cod sursa (job #83366) | Cod sursa (job #1717536) | Cod sursa (job #1814920)
#include <cstdio>
#define N_MAX 100002
#define UNION 1
#define COMPARE 2
using namespace std;
int n;
int T;
int tata[N_MAX];
int h[N_MAX];
inline void unire(int, int);
inline int findDaddy(int);
inline bool isAsociated(int, int);
int main()
{
freopen("disjoint.in", "r", stdin);
freopen("disjoint.out", "w", stdout);
int c, x, y;
scanf("%d%d", &n, &T);
for (int i = 1; i <= n; ++i) {
tata[i] = i;
}
for (int i = 1; i <= T; ++i) {
scanf("%d%d%d", &c, &x, &y);
switch (c) {
case UNION :
unire(x, y);
break;
case COMPARE :
if (isAsociated(x, y)) {
printf("DA\n");
} else {
printf("NU\n");
}
break;
}
}
return 0;
}
inline void unire(int x, int y) {
int tataX = findDaddy(x);
int tataY = findDaddy(y);
if (tataX != tataY) {
if (h[tataX] > h[tataY]) {
tata[tataY] = tataX;
} else if (h[tataX] < h[tataY]) {
tata[tataX] = tataY;
} else {
tata[tataY] = tataX;
h[tataX]++;
}
}
}
inline int findDaddy(int x) {
int t = x;
if (tata[x] != x) {
t = findDaddy(tata[x]);
tata[x] = t;
}
return t;
}
inline bool isAsociated(int x, int y) {
int tataX = findDaddy(x);
int tataY = findDaddy(y);
return (tataX == tataY);
}