Pagini recente » Cod sursa (job #2545925) | Cod sursa (job #147289) | Cod sursa (job #53549) | Cod sursa (job #2777829) | Cod sursa (job #2289092)
#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){
unite(x,y);
}else{
if(find(x)==find(y)) printf("DA\n");
else printf("NU\n");
}
}
return 0;
}