Pagini recente » Cod sursa (job #1412179) | Cod sursa (job #399329) | Cod sursa (job #2594008) | Cod sursa (job #920204) | Cod sursa (job #3185204)
#include <bits/stdc++.h>
using namespace std;
#define INFILE "disjoint.in"
#define OUTFILE "disjoint.out"
struct DSU{
private:
int n;
vector<int> parent, sz;
public:
DSU(int _n) : n(_n) {
parent.resize(n + 1);
sz.resize(n + 1, 1);
for(int i = 1; i <= n; ++i) parent[i] = i;
}
int findParent(int node){
if(parent[node] == node) return node;
return parent[node] = findParent(parent[node]);
}
void uniteSets(int node1, int node2){
node1 = findParent(node1),
node2 = findParent(node2);
if(node1 < node2) swap(node1, node2);
if(node1 == node2) return;
parent[node2] = node1, sz[node1] += sz[node2];
}
};
void solve(){
int n, queries;
cin >> n >> queries;
DSU dsu(n);
for(int i = 0; i < queries; ++i){
int type, node1, node2; cin >> type >> node1 >> node2;
if(type == 1) dsu.uniteSets(node1, node2);
else{
cout << ((dsu.findParent(node1) == dsu.findParent(node2)) ? "DA" : "NU") << '\n';
}
}
}
int main(){
ios_base::sync_with_stdio(false);
freopen(INFILE, "r", stdin);
freopen(OUTFILE, "w", stdout);
cin.tie(nullptr), cout.tie(nullptr);
solve();
return 0;
}