Pagini recente » Cod sursa (job #1780256) | Cod sursa (job #882350) | Cod sursa (job #2837790) | Cod sursa (job #2775067) | Cod sursa (job #256085)
Cod sursa(job #256085)
#include<stdio.h>
FILE*fin=fopen("disjoint.in","r");
FILE*fout=fopen("disjoint.out","w");
#define nm 100005
int n,tata[nm],grad[nm],m;
int find(int x)
{
int ans,y=x;
while(tata[x]!=x) x=tata[x];
ans=x;
while(tata[y]!=y)
{
x=tata[y];
tata[y]=ans;
y=x;
}
return ans;
}
void u(int x,int y)
{
if(grad[x]>grad[y]) tata[y]=x;
else tata[x]=y;
if(grad[x]==grad[y]) grad[y]++;
}
int main()
{
int i,cod,x,y;
fscanf(fin,"%d%d",&n,&m);
for(i=1;i<=n;i++) tata[i]=i,grad[i]=1;
for(i=1;i<=m;i++)
{
fscanf(fin,"%d%d%d",&cod,&x,&y);
if(cod==1) u(find(x),find(y));
else if(find(x)==find(y)) fprintf(fout,"DA\n");
else fprintf(fout,"NU\n");
}
fclose(fin);
fclose(fout);
return 0;
}