Pagini recente » Cod sursa (job #1543497) | Cod sursa (job #1638806) | Cod sursa (job #2328534) | Cod sursa (job #2655069) | Cod sursa (job #2685206)
#include <fstream>
constexpr auto max_n = 100005;
using namespace std;
ifstream fin("disjoint.in");
ofstream fout("disjoint.out");
int n, m;
int parent[max_n];
int levels[max_n];
int get_parent(int node)
{
auto crt_node = node;
while (crt_node != parent[crt_node])
crt_node = parent[crt_node];
const auto root_parent = crt_node;
while (node != parent[node])
{
crt_node = parent[node];
parent[node] = root_parent;
node = crt_node;
}
return root_parent;
}
void join_nodes(const int a, const int b)
{
const auto a_parent = get_parent(a);
const auto b_parent = get_parent(b);
if (levels[a_parent] < levels[b_parent])
{
parent[a_parent] = b_parent;
levels[b_parent]++;
}
else
{
parent[b_parent] = a_parent;
levels[a_parent]++;
}
}
bool query_nodes(const int a, const int b)
{
return get_parent(a) == get_parent(b);
}
int main()
{
fin >> n >> m;
for (auto i = 1; i <= n; i++)
parent[i] = i;
for (auto i = 0; i < m; i++)
{
int cod, x, y;
fin >> cod >> x >> y;
switch (cod)
{
case 1:
join_nodes(x, y);
break;
case 2:
fout << (query_nodes(x, y) ? "DA" : "NU") << "\n";
break;
}
}
return 0;
}