Cod sursa(job #3140666)

Utilizator AndPitAndreeaPiticar AndPit Data 8 iulie 2023 13:57:21
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.96 kb
#include <fstream>
using namespace std;
ifstream f("disjoint.in");
ofstream g("disjoint.out");
const int NMAX = 100001;
int t[NMAX], rang[NMAX];
void leaga(int x, int y){
    if (rang[x] > rang[y])
        t[y] = x;
    else
        t[x] = y;
    if (rang[x] == rang[y])
        rang[y]++;
}
int radacina(int x){
    if (t[x] == x)
        return x;
    return t[x] = radacina(t[x]);
}
int main(){
    int n, m;
    f >> n >> m;
    for (int i = 1; i <= n; ++i){
        t[i] = i;
        rang[i] = 1;
    }
    for (int i = 1; i <= m; ++i){
        int cer, x, y;
        f >> cer >> x >> y;
        if (cer == 1) {
            int r1 = radacina(x);
            int r2 = radacina(y);
            leaga(r1, r2);
        }
        else {
            int r1 = radacina(x);
            int r2 = radacina(y);
            if (r1 == r2)
                g << "DA\n";
            else
                g << "NU\n";
        }
    }
    return 0;
}