Cod sursa(job #3193062)

Utilizator juincPopescu Marian juinc Data 13 ianuarie 2024 22:06:07
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.95 kb
#include <fstream>
#include <vector>

std::vector<int> parent(100002);

int find_root(int node) {
    if (parent[node] == node) 
        return node;

	return parent[node] = find_root(parent[node]);
}

void merge_nodes(int node1, int node2) {
    node1 = find_root(node1);
    node2 = find_root(node2);

    parent[node1] = node2;
}

int main() {
    std::ifstream fin("disjoint.in");
    std::ofstream fout("disjoint.out");

    int nodes, q;
    fin >> nodes >> q;
    
    for (int i = 1; i <= nodes; i++) 
        parent[i] = i;

    while (q--) {
        int op, node1, node2;

        fin >> op >> node1 >> node2;
        if (op == 1) 
            merge_nodes(node1, node2);
        else {
            int root1 = find_root(node1);
            int root2 = find_root(node2);
            if (root1 != root2) 
                fout << "NU\n";
            else 
                fout << "DA\n";
        }
    }

    return 0;
}