Cod sursa(job #2408819)

Utilizator gabrielmGabriel Majeri gabrielm Data 18 aprilie 2019 13:07:32
Problema Paduri de multimi disjuncte Scor 10
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.03 kb
#include <algorithm>
#include <fstream>
#include <iostream>
#include <numeric>
#include <vector>

using namespace std;

void print(const vector<int>& tati) {
    for (int tata : tati) {
        cout << tata << ' ';
    }
    cout << '\n';
}

int find_father(const vector<int>& tati, int nod) {
    if (tati[nod] == nod) {
        return nod;
    } else {
        return find_father(tati, tati[nod]);
    }
}

int main() {
    ifstream in("disjoint.in");
    int n;
    in >> n;

    vector<int> tati(n);

    iota(tati.begin(), tati.end(), 0);

    ofstream out("disjoint.out");

    int m;
    in >> m;
    for (int i = 0; i < m; ++i) {
        int operatie, x, y;
        in >> operatie >> x >> y;

        --x;
        --y;

        //print(tati);

        if (operatie == 1) {
            tati[x] = y;
        } else {
            int tata_x = find_father(tati, x);
            int tata_y = find_father(tati, y);
            out << (tata_x == tata_y ? "DA" : "NU") << '\n';
        }
    }
}