Cod sursa(job #2819252)

Utilizator George_CristianGeorge Dan-Cristian George_Cristian Data 18 decembrie 2021 10:31:38
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.99 kb
#include <fstream>

using namespace std;

ifstream f("disjoint.in");
ofstream g("disjoint.out");

#define NMAX 100005

int n, m, tata[NMAX], adan[NMAX];

void initializare() {
    for (int i = 1; i <= n; i++)
        tata[i] = i;
}

int radacina(int x) {
    if (tata[x] == x)
        return x;
    int rad = radacina(tata[x]);
    tata[x] = rad;
    return rad;
}

void reunire(int x, int y) {
    int rad1 = radacina(x), rad2 = radacina(y);
    if (adan[rad1] < adan[rad2]) {
        tata[rad2] = rad1;
        adan[rad1] = max(adan[rad1], adan[rad2] + 1);
    } else {
        tata[rad1] = rad2;
        adan[rad2] = max(adan[rad2], adan[rad1] + 1);
    }
}

void rezolvare() {
    int cod, x, y;
    for (int i = 1; i <= m; i++) {
        f >> cod >> x >> y;
        if (cod == 1)
            reunire(x, y);
        else if (radacina(x) == radacina(y))
            g << "DA\n";
        else
            g << "NU\n";
    }
}

int main() {
    f >> n >> m;
    initializare();
    rezolvare();
    return 0;
}