Pagini recente » Cod sursa (job #2294820) | Cod sursa (job #982225) | Cod sursa (job #280041) | Cod sursa (job #1047) | Cod sursa (job #2644066)
#include <bits/stdc++.h>
#define NMAX 100001
using namespace std;
ifstream in("disjoint.in");
ofstream out("disjoint.out");
int n, m, operatie, x, y, nivel[NMAX], tati[NMAX];
int radacina(int k) {
int x = k, y;
while (tati[x] != x)
x = tati[x];
while (tati[k] != k) {
y = tati[k];
tati[k] = x;
k = y;
}
return x;
}
void uneste(int x, int y) {
if (nivel[x] > nivel[y])
tati[y] = x;
else
tati[x] = y;
if (nivel[x] == nivel[y])
++nivel[y];
}
int main() {
in >> n >> m;
for (int i = 1; i <= n; ++i) {
nivel[i] = i;
tati[i] = i;
}
for (int i = 1; i <= m; ++i) {
in >> operatie >> x >> y;
if (operatie == 1)
uneste(radacina(x), radacina(y));
else
out << (radacina(x) == radacina(y)? "DA\n" : "NU\n");
}
return 0;
}