Pagini recente » Cod sursa (job #1448729) | Cod sursa (job #2499343) | Cod sursa (job #2393860) | Cod sursa (job #1285535) | Cod sursa (job #1849148)
#include <stdio.h>
#include <stdlib.h>
int sef[100000],temp[100000];
void calcDaBoss(int n){
int i;
for(i=0;i<n;i++)
sef[i]=i;
}
void unionMul(int x,int y){
while(sef[x]!=x)
x=sef[x];
while(sef[y]!=y)
y=sef[y];
sef[x]=sef[y];
}
int find(int x,int y){
int i=0,j;
while(sef[x]!=x){
temp[i]=x;
x=sef[x];
i++;
}
for(j=0;j<i;j++){
sef[temp[j]]=x;
}
i=0;
while(sef[y]!=y){
temp[i]=y;
y=sef[y];
i++;
}
for(j=0;j<i;j++){
sef[temp[j]]=y;
}
if(sef[x]==sef[y])
return 1;
else
return 0;
}
int main()
{
FILE*fin,*fout;
int n,m,code,x,y,val,i;
fin = fopen("disjoint.in" ,"r");
fout = fopen("disjoint.out" ,"w");
fscanf(fin, "%d%d" ,&n,&m);
calcDaBoss(n);
for(i=0;i<m;i++){
fscanf(fin, "%d%d%d" ,&code,&x,&y);
if(code==1){
unionMul(x,y);
}
else{
val=find(x,y);
if(val==0)
fprintf(fout, "NU\n");
else
fprintf(fout, "DA\n");
}
}
fclose(fin);
fclose(fout);
return 0;
}