Pagini recente » Profil Atanasiu_Alexandru_Marian_324CB | Monitorul de evaluare | Istoria paginii utilizator/mogy | Monitorul de evaluare | Cod sursa (job #2220006)
#include <cstdio>
using namespace std;
const int NMAX=100000;
int r[NMAX+5],h[NMAX+5];
int findSet(int x){
while(x!=r[x]){
x=r[x];
}
return x;
}
void UnionSet(int x,int y){
if(h[x]==h[y]){
++h[x];
r[y]=x;
}else if(h[x]>h[y]){
r[y]=x;
}else{
r[x]=y;
}
}
int main(){
freopen("disjoint.in","r",stdin);
freopen("disjoint.out","w",stdout);
int n,m,i,x,y,rx,ry;
scanf("%d%d",&n,&m);
for(i=1;i<=n;++i){
r[i]=i;h[i]=1;
}
for(i=1;i<=m;++i){
int prob;
scanf("%d%d%d",&prob,&x,&y);
if(prob==1){
rx=findSet(x);
ry=findSet(y);
if(r[x]!=r[y]){
UnionSet(rx,ry);
}
}else{
rx=findSet(x);
ry=findSet(y);
if(rx==ry){
printf("DA\n");
}else{
printf("NU\n");
}
}
}
return 0;
}