Pagini recente » Cod sursa (job #1004925) | Cod sursa (job #2745869) | Cod sursa (job #402538) | Cod sursa (job #2536719) | Cod sursa (job #2490953)
#include <iostream>
#include <fstream>
using namespace std;
ifstream in("disjoint.in");
ofstream out("disjoint.out");
int n, m;
int const maxim = 100000;
int parinte[maxim] = { 0 };
int rang[maxim] = { 0 };
int dimensiune[maxim] = { 0 };
int cauta(int x) {
if (parinte[x] != x) {
parinte[x] = cauta(parinte[x]);
}
return parinte[x];
}
void unire(int x, int y) {
int radacina_x = cauta(x);
int radacina_y = cauta(y);
if (radacina_x == radacina_y) return;
if (rang[radacina_x] < rang[radacina_y]) {
swap(radacina_x, radacina_y);
}
parinte[radacina_y] = radacina_x;
if (rang[radacina_x] == rang[radacina_y]) {
rang[radacina_x]++;
}
}
void verificare(int x, int y) {
int radacina_x = cauta(x);
int radacina_y = cauta(y);
if (radacina_x == radacina_y)out << "DA" << endl;
else out << "NU" << endl;
}
int main() {
in >> n >> m;
for (int i = 1; i <= n; i++)parinte[i] = i;
int a, b, operatie;
for (int i = 1; i <= m; i++) {
in >> operatie >> a >> b;
if (operatie == 1)unire(a, b);
else verificare(a, b);
}
return 0;
}