Pagini recente » Cod sursa (job #523357) | Cod sursa (job #219011) | Cod sursa (job #1191302) | Cod sursa (job #419167) | Cod sursa (job #2577016)
#include <cstdio>
#include <vector>
using namespace std;
vector<int> parent, height;
int whos_your_parent(int k) {
if (parent[k] != k)
parent[k] = whos_your_parent(parent[k]);
return parent[k];
}
void unionSets(int left, int right)
{
left = whos_your_parent(left);
right = whos_your_parent(right);
if (height[left] < height[right])
swap(left, right);
// invariant: height[left] >= height[right]
parent[right] = left;
height[left] += (height[left] == height[right]);
}
int main()
{
freopen("disjoint.in", "r", stdin);
freopen("disjoint.out", "w", stdout);
int N, M;
scanf("%d%d", &N, &M);
parent.resize(N + 1);
height.resize(N + 1);
for (int i = 0; i <= N; ++i)
parent[i] = i;
for (int i = 0; i < M; ++i) {
int op, x, y;
scanf("%d%d%d", &op, &x, &y);
if (op == 1) {
unionSets(x, y);
continue;
}
if (whos_your_parent(x) == whos_your_parent(y))
printf("DA\n");
else
printf("NU\n");
}
return 0;
}