Cod sursa(job #2905050)

Utilizator lala_lala_lalaOlteanu Maria lala_lala_lala Data 19 mai 2022 09:27:11
Problema Paduri de multimi disjuncte Scor 50
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.12 kb
#include <bits/stdc++.h>
using namespace std;

int find(int node, vector<int> &parent)
{
    while(node != parent[node])
        node =  parent[node];

    return node;
}

void unite(int n1, int n2, vector<int> &parent, vector<int> &rang)
{
    if (rang[n1] <= rang[n2]) {
        parent[n1] = parent[n2];
        rang[n1] = rang[n2] + 1;
    } else {
        parent[n2] = parent[n1];
        rang[n2] = rang[n1] + 1;
    }
}

int main()
{
    int n, m;

    ifstream fin("disjoint.in");
    ofstream fout("disjoint.out");
    fin >> n >> m;

    vector<int> parent(n + 1, -1);
    vector<int> rang(n + 1, 0);

    for (int i = 0; i < m; ++i) {
        int op;
        fin >> op;

        int x, y;

        fin >> x >> y;

        if (parent[x] == -1)
            parent[x] = x;
        
        if (parent[y] == -1)
            parent[y] = y;
        if (op == 1) {

            unite(x, y, parent, rang);
        } else {
            if (find(x, parent) == find(y, parent)) {
                fout << "DA\n";
            } else {
                fout << "NU\n";
            }
        }
    }

    fin.close();
    fout.close();
    return 0;
}