Pagini recente » Cod sursa (job #1656998) | Cod sursa (job #1581293) | Cod sursa (job #1635719) | Cod sursa (job #754849) | Cod sursa (job #1850668)
#include <cstdio>
#include <cstdlib>
#include <cstring>
#define MAXN 100010
int parent[MAXN];
void setMark(int x, int mark) {
while (parent[x] >= 0) {
int bk = parent[x];
parent[x] = mark;
x = bk;
}
}
int getMark(int x) {
int cx = x;
while (parent[x] >= 0)
x = parent[x];
setMark(cx, x);
return x;
}
bool querey(int x, int y, bool unite = false) {
int mx = getMark(x), my = getMark(y);
if (mx == my) return false;
if (!unite) return true;
if (rand() & 1) parent[mx] = my;
else parent[my] = mx;
return true;
}
int main() {
freopen("disjoint.in", "r", stdin);
freopen("disjoint.out", "w", stdout);
srand(2351);
int N, M;
scanf("%d%d", &N, &M);
memset(parent, 0xFF, sizeof(parent));
for (int i = 0; i < M; ++i) {
int o, a, b;
scanf("%d%d%d", &o, &a, &b);
--a, --b;
if (o == 1)
querey(a, b, true);
else puts(querey(a, b) ? "NU" : "DA");
}
return 0;
}