Pagini recente » Cod sursa (job #2024855) | Cod sursa (job #808801) | Cod sursa (job #2202610) | Cod sursa (job #1751486) | Cod sursa (job #2552455)
#include <iostream>
#include <fstream>
#include <vector>
using namespace std;
ifstream f("disjoint.in");
ofstream g("disjoint.out");
vector <unsigned int> T, Rang;
unsigned int radacina(unsigned int x)
{
unsigned int R; // radacina
unsigned int y; // aux in care retin tatal precedent al lui x (inainte de a-l lega direct la radacina)
for (R = x; T[R] != R; R = T[R]); //acum R este radacina arborelui
//vreau sa plec de la x catre R, iar pe drum sa leg fiecare nod direct la radacina
while (T[x] != x)
{
y = T[x];
T[x] = R;
x = y;
}
return R;
}
void unire(unsigned int x, unsigned int y)
{
if (Rang[x] > Rang[y])
T[y] = x;
else
T[x] = y;
if (Rang[x] == Rang[y])
Rang[y]++;
}
int main()
{
unsigned int n, m;
f >> n >> m;
T = Rang = vector <unsigned int> (n + 1, 0);
for (unsigned int i = 1; i <= n; i++)
{
T[i] = i;
Rang[i] = 1;
}
for (unsigned int i = 1; i <= m; i++)
{
unsigned int cod, x, y;
f >> cod >> x >> y;
if (cod == 1)
{
unire(x, y);
}
else
if (cod == 2)
{
if (radacina(x) != radacina(y))
g << "NU" << '\n';
else
g << "DA" << '\n';
}
}
return 0;
}