Pagini recente » Cod sursa (job #1061041) | Cod sursa (job #1462770) | Cod sursa (job #1465775) | Cod sursa (job #1070555) | Cod sursa (job #2285390)
#include <stdio.h>
const int NMAX = 100005;
int N, M;
int s[NMAX];
int r[NMAX];
void init() {
for (int i = 0; i < N; ++i) {
s[i] = i;
r[i] = 0;
}
}
int find(int x) {
if (x != s[x]) {
s[x] = find(s[x]);
}
return s[x];
}
void u(int x, int y) {
int rx = find(x);
int ry = find(y);
if (rx == ry) {
return;
}
if (r[rx] < r[ry]) {
int aux = rx;
rx = ry;
ry = aux;
}
s[ry] = s[rx];
if (r[rx] == r[ry]) {
r[rx] += 1;
}
}
bool is_same(int x, int y) {
return find(x) == find(y);
}
int main() {
freopen("disjoint.in", "r", stdin);
freopen("disjoint.out", "w", stdout);
scanf("%d%d", &N, &M);
init();
for (int i = 0; i < M; ++i) {
int t, x, y;
scanf("%d %d %d", &t, &x, &y);
--x; --y;
if (t == 1) {
u(x, y);
} else {
bool ok = is_same(x, y);
if (!ok) {
printf("NU\n");
} else {
printf("DA\n");
}
}
}
fclose(stdin);
fclose(stdout);
return 0;
}