Cod sursa(job #2517886)

Utilizator mionelIon. M mionel Data 4 ianuarie 2020 14:15:39
Problema Paduri de multimi disjuncte Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.15 kb
#include <fstream>
using namespace std;
int Rang[100001], T[100001]; ///vector tata
int Radacina_multime(int x)
{
    if(x != T[x])
    {
        int rx = Radacina_multime(T[x]);
        T[x] = rx;
        return T[x];
    }
}


void Unire(int x, int y)
{
    int rx = Radacina_multime(x), ry = Radacina_multime(y);
    if(rx != ry)
    {
        if(Rang[rx] > Rang[ry])
            T[ry] = rx;
        else
        {
            T[rx] = ry;
            if(Rang[rx] == Rang[ry])
                Rang[ry] ++;
        }
    }
}

int main()
{
    ifstream f("disjoint.in");
    ofstream g("disjoint.out");
    int n, x, y, k, o, i;
    f >> n >> k;
    ///initial fiecare nod pointeaza catre el insusi iar rangul fiecarui arbore este 1
    for(i = 1; i <= n; ++ i)
    {
        T[i] = i;
        Rang[i] = 1;
    }
    for(i = 1; i <= k; ++ i)
    {
        f >> o >> x >> y;
        if(o == 1)
            Unire(x, y);
        else
        {
            if(Radacina_multime(x) == Radacina_multime(y))
                g << "DA" << '\n';
            else
               g << "NU" << "\n";
        }
    }
    return 0;
}