Pagini recente » Cod sursa (job #2881363) | Cod sursa (job #1866403) | Cod sursa (job #2901889) | Cod sursa (job #1944433) | Cod sursa (job #251533)
Cod sursa(job #251533)
#include<stdio.h>
#define M 100003
FILE*f=fopen("disjoint.in","r");
FILE*g=fopen("disjoint.out","w");
int tata[M], h[M];
int find(int x) // returnez radacina arborelui in care se afla x
{
int r,t,y;
r=x;
//caut radacina
while(tata[r]) r=tata[r];
y=x;
//fac compresia
while(tata[y])
{
t=tata[y];
tata[y]=r;
y=t;
}
return r;
}
void join(int i, int j)
{
if(h[i] > h[j]) tata[j]=i;
else tata[i]=j;
if(h[i] == h[j]) h[j]++;
}
int main()
{
int n,m,cod,x,y;
fscanf(f,"%d%d",&n,&m);
int i;
for(i=1;i<=n;++i)
{
tata[i]=0;
h[i]=1;
}
while(m--)
{
fscanf(f,"%d %d %d",&cod,&x,&y);
if(cod==1) join(find(x), find(y));
else
{
if(find(x) == find(y)) fprintf(g,"DA\n");
else fprintf(g,"NU\n");
}
}
return 0;
}