Pagini recente » Cod sursa (job #1591800) | Cod sursa (job #413160) | Cod sursa (job #102423) | Cod sursa (job #621542) | Cod sursa (job #1195023)
#include <cstdio>
#define MAX 101010
using namespace std;
int rang[MAX],tata[MAX],n,m;
void unim(int x,int y);
int binary_log_sh(int x);
int main()
{
freopen("disjoint.in","r",stdin);
freopen("disjoint.out","w",stdout);
scanf("%d%d",&n,&m);
for(int i=1;i<=n;tata[i]=i,rang[i]=1,++i);
for(int i=1;i<=m;++i){
int op,x,y;
scanf("%d%d%d",&op,&x,&y);
if(op==2){
if(binary_log_sh(x) == binary_log_sh(y))printf("DA\n");
else printf("NU\n");
}
else
unim(binary_log_sh(x),binary_log_sh(y));
}
return 0;
}
void unim(int x,int y){
if(rang[x]>rang[y])tata[y]=x;
else tata[x]=y;
if(rang[x] == rang[y])++rang[y];
}
int binary_log_sh(int x){
int q,aux;
for(q=x;tata[q]!=q;q=tata[q]);
for(;tata[x]!=x;aux=tata[x],tata[x]=q,x=aux);
return q;
}