Pagini recente » Cod sursa (job #2718801) | Cod sursa (job #2266759) | Cod sursa (job #92742) | Cod sursa (job #1973131) | Cod sursa (job #3150034)
#include <bits/stdc++.h>
#pragma GCC optimize ("Ofast")
#pragma GCC target ("popcnt")
using namespace std;
ifstream fin ("disjoint.in");
ofstream fout ("disjoint.out");
const int MAX_N = 100000;
int n;
struct DSU{
int parent[MAX_N + 5];
int marime[MAX_N + 5];
inline void build(){
for(int node=1; node<=n; node++){
parent[node] = node;
marime[node] = 1;
}
}
inline int get_root(int node){
if(parent[node] == node)
return node;
else
return parent[node] = get_root(parent[node]);
}
inline void join(int node1, int node2){
int root1 = get_root(node1);
int root2 = get_root(node2);
if(marime[root1] < marime[root2]){
parent[root1] = root2;
marime[root2] += marime[root1];
}else{
parent[root2] = root1;
marime[root1] += marime[root2];
}
}
inline void query(int node1, int node2){
int root1 = get_root(node1);
int root2 = get_root(node2);
if(root1 == root2)
fout<<"DA\n";
else
fout<<"NU\n";
}
} tree;
int m;
struct query{
int t, x, y;
} q;
int main (){
ios_base::sync_with_stdio(false);
fin.tie(nullptr), fout.tie(nullptr);
fin>>n>>m;
tree.build();
for(int i=1; i<=m; i++){
fin>>q.t>>q.x>>q.y;
if(q.t == 1){ ///update
tree.join(q.x, q.y);
}else if(q.t == 2){ ///query
tree.query(q.x, q.y);
}
}
return 0;
}