Pagini recente » Cod sursa (job #817432) | Cod sursa (job #1322650) | Cod sursa (job #2352394) | Cod sursa (job #3283785) | Cod sursa (job #1700150)
#include <cstdio>
const int NMAX = 100505;
// REM's algorithm
int N, M, par[NMAX];
void init() {
for (int i = 1; i <= N; i++) {
par[i] = i;
}
}
bool checkSameTree(int x, int y) {
while (par[x] != par[y]) {
if (par[x] == x || par[y] == y) {
break ;
}
if (par[x] < par[y]) {
x = par[x];
} else {
y = par[y];
}
}
return par[x] == par[y];
}
void unite(int x, int y) {
int z;
while (par[x] != par[y]) {
if (par[x] < par[y]) {
if (par[x] == x) {
par[x] = par[y];
break ;
}
z = x;
par[x] = par[y];
x = z;
} else {
if (par[y] == y) {
par[y] = par[x];
break;
}
z = y;
par[y] = par[x];
y = z;
}
}
}
int main() {
freopen("disjoint.in", "r", stdin);
freopen("disjoint.out", "w", stdout);
scanf("%d%d", &N, &M);
init();
int type, x, y;
for (int i = 1; i <= M; i++) {
scanf("%d%d%d", &type, &x, &y);
if (type == 1) {
unite(x, y);
} else {
if (checkSameTree(x, y)) {
printf("DA\n");
} else {
printf("NU\n");
}
}
}
return 0;
}