Cod sursa(job #3357777)

Utilizator TestLicenta123Test Test TestLicenta123 Data 13 iunie 2026 14:45:14
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.76 kb
#include <iostream>
#include <vector>
#include <fstream>

int find_root(int node, std::vector<int> &roots) {
    if (node != roots[node])
        roots[node] = find_root(roots[node], roots);
    return roots[node];
}

int main() {
    std::ifstream input("disjoint.in");
    std::ofstream output("disjoint.out");

    int n, m;
    input >> n >> m;

    std::vector<int> roots(n + 1);
    for (int i = 1; i <= n; ++i)
        roots[i] = i;

    while (m--) {
        int op, x, y;
        input >> op >> x >> y;
        int r1 = find_root(x, roots);
        int r2 = find_root(y, roots);

        if (op == 1) {
            if (r1 != r2)
                roots[r1] = r2;
        } else {
            output << (r1 == r2 ? "DA" : "NU") << '\n';
        }
    }

    return 0;
}