Cod sursa(job #2934211)

Utilizator dragosteleagaDragos Teleaga dragosteleaga Data 5 noiembrie 2022 17:33:31
Problema Paduri de multimi disjuncte Scor 40
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.88 kb
#include <fstream>
#include <iostream>
using namespace std;
ifstream f("disjoint.in");
ofstream o("disjoint.out");
int n, m, tata[2000], h[2000],comanda,nod1,nod2;
int Reprez(int u) {
    while (tata[u] != 0)
        u = tata[u];
    return u;
}
void Reuneste(int u, int v) {
    int ru = Reprez(u);
    int rv = Reprez(v);
    if (h[ru] > h[rv])
        tata[rv] = ru;
    else {
        tata[ru] = rv;
        if (h[ru] == h[rv])
            h[rv] = h[rv] + 1;
    }
}
int main() {
    f >> n >> m;
    //initializarea
    for (int i = 1; i <= n; i++)
        tata[i] = h[i] = 0;
    while(f>>comanda>>nod1>>nod2){
        if(comanda==2){
            if(Reprez(nod1)== Reprez(nod2))
                o<<"DA\n";
            else
                o<<"NU\n";
        }
        //
        else{
            if(Reprez(nod1)!= Reprez(nod2))
                Reuneste(nod1,nod2);
        }
    }


    return 0;
}