Pagini recente » Cod sursa (job #2948773) | Cod sursa (job #2311240) | Cod sursa (job #2292890) | Cod sursa (job #1764474) | Cod sursa (job #3312808)
#include <bits/stdc++.h>
using namespace std;
const char iname[] = "disjoint.in";
const char oname[] = "disjoint.out";
class Dsu {
vector<int> p;
vector<int> r;
public:
Dsu(int n) : p(vector<int>(n)), r(vector<int>(n)) {
iota(p.begin(), p.end(), 0);
}
int get(int u) {
if (u == p[u]) {
return u;
}
return (p[u] = get(p[u]));
}
bool put(int u, int v) {
int U = get(u);
int V = get(v);
if (U == V) {
return false;
}
if (r[U] <= r[V]) {
p[U] = V;
if (r[u] == r[v]) {
++r[v];
}
} else {
p[V] = U;
}
return true;
}
};
int main() {
#ifndef LOCAL
freopen(iname, "r", stdin);
freopen(oname, "w", stdout);
#endif
ios::sync_with_stdio(false);
cin.tie(nullptr);
int n;
int m;
cin >> n >> m;
Dsu dsu(n);
for (; m--;) {
int o;
int u;
int v;
cin >> o >> u >> v;
--o;
--u;
--v;
if (o) {
cout << (dsu.get(u) == dsu.get(v) ? "DA" : "NU") << endl;
} else {
dsu.put(u, v);
}
}
return 0;
}