Pagini recente » Cod sursa (job #607680) | Cod sursa (job #2853528) | Cod sursa (job #2452914) | Cod sursa (job #891490) | Cod sursa (job #1850006)
#include <bits/stdc++.h>
using namespace std;
struct UnionFind {
vector<int> par;
vector<int> rank;
vector<int> size;
int c;
UnionFind(int n) : par(n), rank(n, 0), size(n, 1), c(n) {
for (int i = 0; i < n; i++) {
par[i] = i;
}
}
int find(int i) {
return (par[i] == i ? i : (par[i] = find(par[i])));
}
bool same(int i, int j) {
return find(i) == find(j);
}
int get_size(int i) {
return size[find(i)];
}
int count() {
return c;
}
void merge(int i, int j) {
i = find(i), j = find(j);
if (i == j) {
return;
}
c--;
if (rank[i] > rank[j]) {
swap(i, j);
}
par[i] = j;
size[j] += size[i];
if (rank[i] == rank[j]) {
rank[j]++;
}
}
};
int main() {
freopen("disjoint.in", "r", stdin);
freopen("disjoint.out", "w", stdout);
int n, m;
scanf("%d %d", &n, &m);
UnionFind uf(n);
for (int i = 0; i < m; i++) {
int c, x, y;
scanf("%d %d %d", &c, &x, &y);
x--, y--;
if (c == 1) {
uf.merge(x, y);
} else {
puts(uf.same(x, y) ? "DA" : "NU");
}
}
return 0;
}