Pagini recente » Cod sursa (job #747947) | Cod sursa (job #3304828) | Cod sursa (job #2177069) | Cod sursa (job #2990714) | Cod sursa (job #1405951)
#include <stdio.h>
int v[100001];
int find(int x){
int cop=x,sef;
while(v[x]!=x)
x=v[x];
sef=x;
x=cop;
while(v[x]!=x){
cop=x;
x=v[x];
v[x]=sef;
}
return sef;
}
void unire(int x,int y){
int a,b;
a=find(x);
b=find(y);
if(a>b)
v[b]=a;
else
v[a]=b;
}
int main(){
FILE *fin,*fout;
fin=fopen("disjoint.in","r");
fout=fopen("disjoint.out","w");
int i,n,m,x,y,cer;
fscanf(fin,"%d%d",&n,&m);
for(i=1;i<=n;i++)
v[i]=i;
for(i=1;i<=m;i++){
fscanf(fin,"%d%d%d",&cer,&x,&y);
if(cer==2)
if(find(x)==find(y))
fprintf(fout,"DA\n");
else
fprintf(fout,"NU\n");
else
unire(x,y);
}
fclose(fin);
fclose(fout);
return 0;
}