Pagini recente » Cod sursa (job #2780863) | Cod sursa (job #2702936) | Cod sursa (job #239894) | Cod sursa (job #2747912) | Cod sursa (job #2905044)
#include <bits/stdc++.h>
// #include <vector>
using namespace std;
#define NMAX 100005
int parents[NMAX];
int ranks[NMAX];
int find(int x) {
while (x != parents[x]) {
x = parents[x];
}
return x;
}
void unite(int x, int y) {
if (ranks[x] < ranks[y]) {
parents[x] = parents[y];
} else {
parents[y] = parents[x];
}
if (ranks[x] == ranks[y]) {
ranks[x]++;
}
}
int main(void) {
freopen("disjoint.in", "r", stdin);
freopen("disjoint.out", "w", stdout);
int n; cin >> n;
int m; cin >> m;
for (int i = 1; i <= n; ++i) {
parents[i] = i;
ranks[i] = 0;
}
for (int i = 0; i < m; ++i) {
int op; cin >> op;
int x, y; cin >> x >> y;
if (op == 1) {
unite(x, y);
} else {
if (find(x) == find(y)) {
cout << "DA" << '\n';
} else {
cout << "NU" << '\n';
}
}
}
return 0;
}