Pagini recente » Cod sursa (job #697476) | Cod sursa (job #1100791) | Cod sursa (job #323232) | Cod sursa (job #1908538) | Cod sursa (job #3158134)
#include <bits/stdc++.h>
struct dsu {
std::vector<int> p, o;
void reset(int len) {
p.resize(len);
o.resize(len);
std::fill(o.begin(), o.end(), 1);
for(int i = 0; i < len; i++) p[i] = i;
}
int find(int t) noexcept {
while(t != p[t]) t = p[t] = p[p[t]];
return t;
}
bool same_set(int a, int b) noexcept { return find(a) == find(b); }
void merge(int a, int b) noexcept {
a = find(a); b = find(b);
if(a == b) return;
if(o[a] < o[b]) std::swap(a, b);
p[b] = a;
o[a] += o[a] == o[b];
}
};
int main() {
freopen("disjoint.in", "r", stdin);
freopen("disjoint.out", "w", stdout);
int n, m; std::cin >> n >> m;
dsu set; set.reset(n + 5);
while(m--) {
int cod, x, y; std::cin >> cod >> x >> y;
if(cod == 1) set.merge(x, y);
else std::cout << (set.same_set(x, y) ? "DA" : "NU") << '\n';
}
return 0;
}