Pagini recente » Cod sursa (job #1757913) | Cod sursa (job #2471151) | Cod sursa (job #1832261) | Cod sursa (job #2597752) | Cod sursa (job #2807112)
#include <iostream>
#include <vector>
#include <numeric>
int main()
{
std::freopen("disjoint.in", "r", stdin);
std::freopen("disjoint.out", "w", stdout);
std::ios_base::sync_with_stdio(false);
std::cin.tie(nullptr);
int N, M;
std::cin >> N >> M;
std::vector<int> link(N + 1);
std::iota(link.begin(), link.end(), 0);
std::vector<int> size(N + 1, 1);
const auto find_set = [&](int x)
{
while(x != link[x])
{
x = link[x];
}
return x;
};
const auto unite = [&](int a, int b)
{
a = find_set(a);
b = find_set(b);
if(size[a] < size[b])
{
std::swap(a, b);
}
size[a] += size[b];
link[b] = a;
};
for(int i = 0; i < M; ++i)
{
static constexpr const char* ans[2] = {"NU\n", "DA\n"};
int op, x, y;
std::cin >> op >> x >> y;
switch(op)
{
case 1:
{
unite(x, y);
break;
}
case 2:
{
std::cout << ans[find_set(x) == find_set(y)];
break;
}
default:
__builtin_unreachable();
}
}
}