Pagini recente » Cod sursa (job #2765000) | Cod sursa (job #2616327) | Cod sursa (job #2664954) | Cod sursa (job #867452) | Cod sursa (job #296605)
Cod sursa(job #296605)
#include <cstdio>
#define N 100001
#define REUNESTE 1
#define VERIFICA 2
int n, m;
int rang[N], tata[N];
int radacina(int x)
{
int rez = x, aux;
while(tata[rez] != rez) rez = tata[rez];
while(tata[x] != x)
{
aux = tata[x];
tata[x] = rez;
x = tata[x];
}
return rez;
}
void reuneste(int x, int y)
{
if(rang[x] > rang[y]) tata[y] = x;
else tata[x] = y;
if(rang[x] == rang[y]) rang[y]++;
}
int main()
{
FILE* fi = fopen("disjoint.in", "r");
FILE* fo = fopen("disjoint.out", "w");
fscanf(fi, "%d%d", &n, &m);
int i, x, y, operatie;
for(i = 1; i <= n; ++i)
{
rang[i] = 1;
tata[i] = i;
}
while(m--)
{
fscanf(fi, "%d%d%d", &operatie, &x, &y);
if(operatie == REUNESTE) reuneste(radacina(x), radacina(y));
if(operatie == VERIFICA)
{
if(radacina(x) == radacina(y)) fprintf(fo, "DA\n");
else fprintf(fo, "NU\n");
}
}
fclose(fi);
fclose(fo);
}