Pagini recente » Cod sursa (job #1925137) | Cod sursa (job #1127699) | Cod sursa (job #1229206) | Cod sursa (job #1544750) | Cod sursa (job #2289207)
#include <cstdio>
const int MAX = 100001;
int n,m,tati[MAX],rang[MAX];
int find(int x){
int node;
node = x;
while(tati[node]!=node) node=tati[node];
int y;
while(tati[x]!=x){
y=tati[x];
tati[y]=node;
x=y;
}
return node;
}
void unite(int x,int y){
if(rang[x]<rang[y]) tati[x]=y;
else tati[y]=x;
if(rang[x]==rang[y]) ++rang[y];
}
int main() {
freopen("disjoint.in","r",stdin);
freopen("disjoint.out","w",stdout);
scanf("%d %d",&n,&m);
for(int i=0;i<n;++i){
tati[i]=i;
rang[i]=1;
}
for(int i=0;i<m;++i){
int cerinta, x,y;
scanf("%d %d %d",&cerinta,&x,&y);
if(cerinta==1){
if (find(x) == find(y)) {fprintf(stderr,"%d ", i);return 0;}
unite(x,y);
}else{
if(find(x)==find(y)){
printf("DA\n");
}
else printf("NU\n");
}
}
return 0;
}