Cod sursa(job #2945208)

Utilizator Stefan_MagureanuMagureanu Stefan Stefan_Magureanu Data 23 noiembrie 2022 16:38:28
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.79 kb
#include <fstream>
#include <vector>
#include <string>

using namespace std;

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

vector<int> multimi;

int radacina(int x) {
    while (multimi[x] != x)
        x = multimi[x];
    return x;
}

void reuniune(int x, int y) {
    multimi[radacina(y)] = radacina(x);
}

string verificare_multime(int x, int y) {
    return radacina(x) == radacina(y) ? "DA\n" : "NU\n";
}

int main() {
    size_t N, M, i;
    fin >> N >> M;
    multimi.resize(N + 1);
    for (i = 1; i <= N; i++)
        multimi[i] = i;
    for (i = 1; i <= M; i++) {
        int operatie, x, y;
        fin >> operatie >> x >> y;
        if (operatie == 1)
            reuniune(x, y);
        else
            fout << verificare_multime(x, y);
    }
    fin.close(), fout.close();
}