Pagini recente » Cod sursa (job #357517) | Cod sursa (job #790538) | Cod sursa (job #1216771) | Cod sursa (job #1533617) | Cod sursa (job #1493821)
#include<bits/stdc++.h>
using namespace std;
ifstream fin("disjoint.in");
ofstream fout("disjoint.out");
#define MAXN 100005
int n, m, Set[MAXN], Size[MAXN];
vector<int> List[MAXN];
void Merge(int what, int where){
while(!List[what].empty()){
int node=List[what].back();
List[what].pop_back();
Set[node]=where;
List[where].push_back(node);
}
Size[where]+=Size[what];
Size[what]=0;
}
void Union(int a, int b){
int m1=Set[a], m2=Set[b];
if(Size[m1]<Size[m2])
Merge(m1, m2);
else Merge(m2, m1);
}
int main(){
fin>>n>>m;
int cod, x, y;
for(cod=1; cod<=n; ++cod){
Set[cod]=cod;
List[cod].push_back(cod);
}
while(m--){
fin>>cod>>x>>y;
if(cod==1) Union(x, y);
else fout<<((Set[x]==Set[y])?"DA\n":"NU\n");
}
return 0;
}