Pagini recente » Cod sursa (job #3191445) | Cod sursa (job #2820265) | Cod sursa (job #2839206) | Cod sursa (job #1487435) | Cod sursa (job #1857155)
#include <iostream>
#include <cstdio>
#include <unordered_map>
using namespace std;
struct Element{int r, p;};
unordered_map<int,Element> u;
int n, m;
void make_set(int val){
u[val].p=val;
u[val].r=0;
}
int find_set(int val){
int x=val, y, root;
while(x!=u[x].p)x=u[x].p;
root=x;
while(x!=u[x].p){
y=u[x].p;
u[x].p=root;
x=y;
}
return root;
}
void merge_sets(int x, int y){
int set1=find_set(x);
int set2=find_set(y);
if(u[set1].r>u[set2].r){
u[set2].p=set1;
}else if(u[set1].r<u[set2].r){
u[set1].p=set2;
}else{
u[set2].p=set1;
u[set2].r++;
}
}
int main(){
freopen("disjoint.in", "r", stdin);
freopen("disjoint.out", "w", stdout);
cin>>n>>m;
int op, a, b;
for(int i=1; i<=n; i++)make_set(i);
for(int i=1; i<=m; i++){
cin>>op>>a>>b;
if(op==1)merge_sets(a, b);
else cout<<((find_set(a)==find_set(b))?"DA":"NU")<<"\n";
}
return 0;
}