Pagini recente » Cod sursa (job #899459) | Cod sursa (job #1972206) | Cod sursa (job #738384) | Cod sursa (job #2973529) | Cod sursa (job #2073194)
#include <stdio.h>
#include <stdlib.h>
#define NMAX 10000
int tomb[NMAX];
int hossz[NMAX];
FILE * fout;
int root(int pont)
{
int i = pont;
while(i != tomb[i])
{
tomb[i] = tomb[tomb[i]];
i = tomb[i];
}
return i;
}
void unite(int pont1,int pont2)
{
int root1,root2;
root1 = root(pont1);
root2 = root(pont2);
if(root1 != root2)
{
if(hossz[root1] > hossz[root2])
{
tomb[root2] = root1;
hossz[root1] += hossz[root2];
}
else
{
tomb[root1] = root2;
hossz[root2] += hossz[root1];
}
}
}
void querry(int pont1,int pont2)
{
int root1,root2;
root1 = root(pont1);
root2 = root(pont2);
if(root1 == root2)
{
fprintf(fout,"DA\n");
}
else
{
fprintf(fout,"NU\n");
}
}
int main()
{
FILE * fin = fopen("disjoint.in","r");
fout = fopen("disjoint.out","w");
int cs,e;
int i;
fscanf(fin,"%i %i",&cs,&e);
for(i = 1; i <= cs; ++i)
{
tomb[i] = i;
hossz[i] = 1;
}
int muvelet,pont1,pont2;
for(i = 1; i <= e; ++i)
{
fscanf(fin,"%i %i %i",&muvelet,&pont1,&pont2);
if(muvelet == 1)
{
unite(pont1,pont2);
}
else
{
querry(pont1,pont2);
}
}
free(tomb);
return 0;
}