Pagini recente » Cod sursa (job #1015477) | Cod sursa (job #3283811) | Cod sursa (job #869198) | Cod sursa (job #2629837) | Cod sursa (job #1047430)
#include<stdio.h>
#include<string.h>
const int dim=1000002;
int tata[dim];
inline int abs(int a){ return a<0?-a:a; }
void init(int N){
memset(tata+1,-1,sizeof(int)*N);
}
int find(int x){
int it,temp,radacina=x;
while(tata[radacina]>=0){
radacina=tata[radacina];
}
//Compresion
it=x;
while(tata[it]>=0){
temp=it;
it=tata[it];
tata[temp]=radacina;
}
return radacina;
}
void merge(int x,int y){
int tatax,tatay;
tatax=find(x);
tatay=find(y);
if(tata[tatax]<=tata[tatay]){
tata[tatay]=tatax;
if(tata[tatax]==tata[tatay])
tata[tatax]++;
}else{
tata[tatax]=tatay;
}
}
int main(){
int N,M,op,x,y;
freopen("disjoint.in","r",stdin);
freopen("disjoint.out","w",stdout);
scanf("%d %d",&N,&M);
init(N);
for(int i=0;i<M;i++){
scanf("%d %d %d",&op,&x,&y);
switch(op){
case 1: merge(x,y); break;
case 2:
if(find(x)==find(y))
printf("DA\n");
else
printf("NU\n");
break;
}
}
return 0;
}