Pagini recente » Cod sursa (job #161627) | Cod sursa (job #1361726) | Cod sursa (job #168677) | Cod sursa (job #406263) | Cod sursa (job #2681347)
#include <iostream>
#include <fstream>
std::ifstream fin ("disjoint.in");
std::ofstream fout ("disjoint.out");
int T[100020], Rang[100020];
int Radacina(int k) {
if (T[k] == 0)
return k;
else
{
int x = Radacina(T[k]);
T[k] = x;
return x;
}
}
void Unire(int k, int p)
{
int rk = Radacina(k), rp = Radacina(p);
if (rk != rp)
{
if (Rang[rk] > Rang[rp])
T[rp] = rk;
else
{
T[rk] = rp;
if (Rang[rk] == Rang[rp])
Rang[rp] ++;
}
}
}
int main()
{
int n, m, op, x, y;
fin >> n >> m;
for (int i = 0; i < m; ++i)
{
fin >> op >> x >> y;
if (op == 1)
Unire(x, y);
else {
int r_x = Radacina(x), r_y = Radacina(y);
if (r_x == r_y)
fout << "DA\n";
else fout << "NU\n";
}
}
return 0;
}