Cod sursa(job #2549545)

Utilizator gabbie02Thomits Gabriel gabbie02 Data 17 februarie 2020 19:31:30
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.11 kb
#include <fstream>

using namespace std;

ifstream fin("disjoint.in");
ofstream fout("disjoint.out");
unsigned int * par;
unsigned int * rang;

unsigned int parent(unsigned int x)
{
    if(par[x] == 0){
        return x;
    }
    par[x] = parent(par[x]);
    return par[x];
}

int main()
{
    unsigned int n, m, x, y, px, py;
    char op;
    fin >> n >> m;
    par = new unsigned int[n + 1]();
    rang = new unsigned int[n + 1]();
    while(m){
        fin >> op >> x >> y;
        px = parent(x);
        py = parent(y);
        switch(op){
            case '1':
                if(rang[px] > rang[py]){
                    par[py] = px;
                } else {
                    par[px] = py;
                    if(rang[px] == rang[py]){
                        rang[py]++;
                    }
                }
                break;
            case '2':
                if(px == py){
                    fout << "DA\n";
                } else {
                    fout << "NU\n";
                }
                break;
        }
        m--;
    }
    return 0;
}