Cod sursa(job #2948383)

Utilizator robert2211Barbu Robert-Gabriel robert2211 Data 27 noiembrie 2022 17:41:49
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.09 kb
#include <fstream>
#include <iostream>

using namespace std;

ifstream f("disjoint.in");
ofstream g("disjoint.out");

long tata[100001], ct[100001];

int radacina(int a) //afalm unde este radacina nodului
{
    while (tata[a] != 0)
        a = tata[a];
    return a;
}

void reuniune(int a, int b)  //facem reuniunea multimilor
{
    int ta = radacina(a);
    int tb = radacina(b);
    if (ct[ta] > ct[tb])
        tata[tb] = ta;
    else {
        tata[ta] = tb;
        if (ct[ta] == ct[tb])
            ct[tb] = ct[tb] + 1;
    }
}
int main()
{
    long N, M, cod, x, y;
    f>>N>>M;

    for (int i = 1; i <= N; i++) //initializare
        tata[i] = ct[i] = 0;

    while(f>>cod>>x>>y)
    {
        if(cod==1)
        {
            if(radacina(x)!= radacina(y))
                reuniune(x,y);
        }
        else if(cod==2)
        {
            if(radacina(x)== radacina(y)) // x si y se afla in aceeasi multime daca au aceeasi radacina
                g<<"DA"<<'\n';
            else
                g<<"NU"<<'\n';
        }

    }


    return 0;
}