Pagini recente » Cod sursa (job #2737966) | Cod sursa (job #2567588) | Cod sursa (job #2921071) | Cod sursa (job #1265475) | Cod sursa (job #257575)
Cod sursa(job #257575)
#include<stdio.h>
#define IN "disjoint.in"
#define OUT "disjoint.out"
#define NMAX 100001
#define ll long long
ll Tata[NMAX],Rang[NMAX];
ll n,m;
void Union(ll x,ll y){
if(Rang[x]>Rang[y]) Tata[y]=x;
else {
Tata[x]=y;
if(Rang[x]==Rang[y]) Rang[y]++;
}
}
ll Find(int x){
ll Root=x,tata;
while(Tata[Root]!=Root) Root=Tata[Root];
for( ; x!=Root ; ) {
tata = Tata[x];
Tata[x] = Root;
x = tata;
}
return Root;
}
int main(){
freopen(IN,"rt",stdin);
freopen(OUT,"wt",stdout);
scanf("%d%d",&n,&m);
int i,o;
ll x,y;
for(i=1;i<=n;i++) {
Tata[i]=i;
Rang[i]=1;
}
for(;m--;){
scanf("%d%d%d",&o,&x,&y);
if(o==1) Union(Find(x),Find(y));
else {
if(Find(x)==Find(y)) printf("DA\n");
else printf("NU\n");
}
}
return 0;
}