Pagini recente » Cod sursa (job #2477575) | Cod sursa (job #1468375) | Cod sursa (job #2050952) | Profil Vacar | Cod sursa (job #3030649)
#include<bits/stdc++.h>
using namespace std;
ifstream fin("disjoint.in");
ofstream fout("disjoint.out");
const int Nmax=1e5+1;
int n,m,T[Nmax],Nr[Nmax];
void Union(int, int);
bool ok(int,int);
int Find(int);
int main(){
int t,a,b;
fin>>n>>m;
for(int i=1;i<=n;i++) T[i]=i,Nr[i]=1;
for(int i=1;i<=m;i++){
fin>>t>>a>>b;
if(t==1) Union(Find(a),Find(b));
else if(ok(a,b)) fout<<"DA"<<'\n'; else fout<<"NU"<<'\n';
}
return 0;
}
void Union(int a, int b){
if(Find(a)==Find(b)) return ;
if(Nr[a]>Nr[b]) T[b]=T[a];
else T[a]=T[b];
if(Nr[a]==Nr[b]) Nr[b]++;
}
bool ok(int a, int b){
return Find(a)==Find(b);
}
int Find(int a){int v;
for(v=a;T[v]!=v;v=T[v]);
for(;T[a]!=a;){
int y=T[a];
T[a]=v;
a=y;
}
return v;
}