Pagini recente » Cod sursa (job #387487) | Cod sursa (job #2153942) | Cod sursa (job #650625) | Cod sursa (job #389759) | Cod sursa (job #2325794)
#include <iostream>
#include <fstream>
#define MAXN 100010
using namespace std;
int father[MAXN], height[MAXN];
void doFather(int k, int &value) {
if (k == father[k]) {
value = k;
return;
}
doFather(father[k], value);
father[k] = value;
}
void initialize(int n) {
for (int i = 1; i <= n; i++) {
father[i] = i;
height[i] = 1;
}
}
void reunite(int x, int y) {
father[x] = father[y];
if (height[x] == height[y])
height[x] = height[y] = height[x] + 1;
}
void solve() {
ifstream fin("disjoint.in");
int n, m, x, y, k;
fin >> n >> m;
initialize(n);
for (int i = 0; i < m; i++) {
fin >> k >> x >> y;
if (k == 1) {
doFather(x, x);
doFather(y, y);
reunite(x, y);
}
else {
doFather(x, x);
doFather(y, y);
if (father[x] == father[y])
cout << "DA\n";
else
cout << "NU\n";
}
}
}
int main() {
solve();
return 0;
}