Pagini recente » Cod sursa (job #2450070) | Cod sursa (job #34913) | Cod sursa (job #175782) | Cod sursa (job #1883272) | Cod sursa (job #266595)
Cod sursa(job #266595)
#include <stdio.h>
#define nmax 100020
#define in "disjoint.in"
#define out "disjoint.out"
FILE *f=fopen(in,"r"),*g=fopen(out,"w");
int n,m,tt[nmax],rg[nmax];
int find(int x){
int r,y;
for(r=x;tt[r]!=r;r=tt[r]);
while(tt[x]!=x){
y=tt[x];
tt[x]=r;
x=y;
}
return r;
}
void unite(int x,int y){
if(rg[x]>rg[y])tt[y]=x;
else tt[x]=y;
if(rg[x]==rg[y])rg[y]++;
}
int main(){
fscanf(f,"%d%d",&n,&m);
int x,y,i,cd;
for(i=1;i<=n;i++){
tt[i]=i;
rg[i]=1;
}
for(i=1;i<=m;i++){
fscanf(f,"%d%d%d",&cd,&x,&y);
if(cd==2){
if(find(x)==find(y))fprintf(g,"DA\n");
else fprintf(g,"NU\n");
}
else{
unite(find(x),find(y));
}
}
return 0;
}