Pagini recente » Cod sursa (job #564635) | Cod sursa (job #231258) | Cod sursa (job #638015) | Cod sursa (job #2379649) | Cod sursa (job #2706906)
//Ilie Dumitru
#include<cstdio>
int rang[100000], tata[100000], N, M;
int gaseste_radacina(int x)
{
int r, y;
for(r=x;r!=tata[r];r=tata[r]);
for(;x!=r;x=y)
{
y=tata[x];
tata[x]=r;
}
return r;
}
void uneste(int x, int y)
{
int r1, r2;
r1=gaseste_radacina(x);
r2=gaseste_radacina(y);
if(rang[r1]<rang[r2])
tata[r1]=r2;
else
tata[r2]=r1;
if(rang[r1]==rang[r2])
rang[r2]++;
}
int main()
{
int i, a, b, c;
FILE *f=fopen("disjoint.in", "r"), *g=fopen("disjoint.out", "w");
fscanf(f, "%i", &N);
fscanf(f, "%i", &M);
for(i=0;i<N;++i)
{
rang[i]=1;
tata[i]=i;
}
for(i=0;i<M;++i)
{
fscanf(f, "%i", &a);
fscanf(f, "%i", &b);
fscanf(f, "%i", &c);
--b;
--c;
if(a==1)
uneste(b, c);
else
{
if(gaseste_radacina(b)==gaseste_radacina(c))
fprintf(g, "DA\n");
else
fprintf(g, "NU\n");
}
}
fclose(f);
fclose(g);
return 0;
}