Pagini recente » Cod sursa (job #2732166) | Monitorul de evaluare | Cod sursa (job #685631) | Cod sursa (job #470937) | Cod sursa (job #2839812)
#include <iostream>
#include <vector>
using namespace std;
vector<int> parent, rang;
void unite(int x, int y) {
if (rang[x] > rang[y]) {
parent[y] = x;
}
else {
parent[x] = y;
}
if (rang[x] == rang[y]) {
++rang[y];
}
}
int find(int x) {
int root = x;
while (parent[root]) {
root = parent[root];
}
while (parent[x]) {
int aux = x;
x = parent[x];
parent[aux] = root;
}
return root;
}
int main() {
freopen("disjoint.in", "r", stdin);
freopen("disjoint.out", "w", stdout);
int n, m;
scanf("%d %d ", &n, &m);
parent = rang = vector<int>(n + 1, 0);
for (; m; --m) {
int cod, x, y;
scanf("%d %d %d", &cod, &x, &y);
if (cod == 1) {
unite(find(x), find(y));
}
else if (find(x) == find(y)) {
printf("DA\n");
}
else {
printf("NU\n");
}
}
return 0;
}