Pagini recente » Cod sursa (job #1598250) | Cod sursa (job #1463162) | Cod sursa (job #77198) | Cod sursa (job #2458530) | Cod sursa (job #335627)
Cod sursa(job #335627)
#include<stdio.h>
int rang[100001],p[100001];
void unite(int x,int y)
{
if(rang[x]>rang[y])
p[y]=x;
else
{
p[x]=y;
if(rang[x]==rang[y])
rang[y]++;
}
}
int find(int x)
{
if(x!=p[x])
p[x]=find(p[x]);
return p[x];
}
void build(int x)
{
p[x]=x;
rang[x]=0;
}
void reunion(int x,int y)
{
unite(find(x),find(y));
}
int main()
{
int n,m,x,y,i,tip;
FILE *f=fopen("disjoint.in","r");
FILE *g=fopen("disjoint.out","w");
fscanf(f,"%i%i\n",&n,&m);
for(i=1;i<=n;i++)
build(i);
for(i=0;i<m;i++)
{
fscanf(f,"%i%i%i\n",&tip,&x,&y);
if(tip==1)
reunion(x,y);
else
{
if(find(x)==find(y))
fprintf(g,"%s\n","DA");
else
fprintf(g,"%s\n","NU");
}
}
fclose(f);
fclose(g);
return 0;
}