Pagini recente » Cod sursa (job #2722073) | Cod sursa (job #1788962) | Cod sursa (job #2363267) | Cod sursa (job #688012) | Cod sursa (job #2514356)
#include <bits/stdc++.h>
using namespace std;
#define MAX_N 100000 + 1
int parinte[MAX_N], marime_arbore[MAX_N];
void initializare_padure(int N)
{
for(int i = 1; i <= N; ++i)
{
parinte[i] = i;
marime_arbore[i] = 1;
}
return;
}
int gaseste_radacina(int nod)
{
int auxiliar;
int radacina;
while(auxiliar != parinte[auxiliar])
{
auxiliar = parinte[auxiliar];
}
radacina = auxiliar;
auxiliar = nod;
while(auxiliar != radacina)
{
auxiliar = parinte[nod];
parinte[nod] = radacina;
nod = auxiliar;
}
return radacina;
}
void uneste_arbori(int nod_x, int nod_y)
{
int radacina_x = gaseste_radacina(nod_x);
int radacina_y = gaseste_radacina(nod_y);
if(radacina_x == radacina_y)
{
return;
}
if(marime_arbore[radacina_x] > marime_arbore[radacina_y])
{
parinte[radacina_y] = radacina_x;
marime_arbore[radacina_x] += marime_arbore[radacina_y];
marime_arbore[radacina_y] = 0;
}
else
{
parinte[radacina_y] = radacina_x;
marime_arbore[radacina_y] += marime_arbore[radacina_x];
marime_arbore[radacina_x] = 0;
}
return;
}
int main()
{
ifstream fin("disjoint.in");
ofstream fout("disjoint.out");
int N, M;
fin >> N >> M;
initializare_padure(N);
for(int i = 1; i <= M; ++i)
{
int cerinta, x, y;
fin >> cerinta >> x >> y;
if(cerinta == 1)
{
uneste_arbori(x, y);
}
else
{
if(gaseste_radacina(x) == gaseste_radacina(y))
{
cout << "DA\n";
}
else
{
cout << "NU\n";
}
}
}
}