Cod sursa(job #2976613)

Utilizator Cosmin1605Damian Cosmin Cosmin1605 Data 9 februarie 2023 19:12:01
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.99 kb
#include <iostream>
#include <fstream>
#define NMAX 100001
using namespace std;

ifstream input("disjoint.in");
ofstream output("disjoint.out");

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

int radacina(int nod){
    if(tata[nod] == 0){
        return nod;
    }
    else{
        return radacina(tata[nod]);
    }
}

void unire(int a, int b){
    int ra = radacina(a);
    int rb = radacina(b);

    if(rang[ra] > rang[rb]){
        tata[rb] = ra;
    }
    else{
        tata[ra] = rb;
        if(rang[ra] == rang[rb]){
            rang[rb]++;
        }
    }
}

int main()
{
    int op, nod1, nod2, r1, r2;
    input >> n >> m;
    for(int i = 1; i <= m; i++){
        input >> op >> nod1 >> nod2;
        if(op == 1){
            unire(nod1, nod2);
        }
        if(op == 2){
            r1 = radacina(nod1);
            r2 = radacina(nod2);
            (r1 == r2) ? (output << "DA") : (output << "NU");
            output << '\n';
        }
    }
    return 0;
}