Cod sursa(job #2870525)

Utilizator mihaicrisanMihai Crisan mihaicrisan Data 12 martie 2022 13:39:14
Problema Paduri de multimi disjuncte Scor 20
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.96 kb
#include <fstream>

using namespace std;

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

const int NMAX = 100005;

int n, m, c, a, b;
int RG[NMAX], T[NMAX];

void init() {
    ///initializare vector tati si vectori rang
    for (int i = 1; i <= n; i++) {
        T[i] = i;
        RG[i] = 1;
    }
}

int radacina(int node) {
    if (T[node] == node)
        return node;
    return radacina(T[node]);
}

void unite(int x, int y) {
    if (RG[x] > RG[y])
        T[y] = x;
    else
        T[x] = y;

    if (RG[x] == RG[y])
        T[y] == x, RG[x]++;
}

int main(){
    fin >> n >> m;
    init();
    for (int i = 1; i <= m; i++) {
        fin >> c >> a >> b;
        if (c == 1)
            unite(a, b);
        else {
            a = radacina(a);
            b = radacina(b);
            if (a == b)
                fout << "DA\n";
            else
                fout << "NU\n";
        }
    }
    return 0;
}