Cod sursa(job #3033136)

Utilizator SSKMFSS KMF SSKMF Data 23 martie 2023 13:54:43
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.91 kb
#include <fstream>
using namespace std;

ifstream cin ("disjoint.in");
ofstream cout ("disjoint.out");

int noduri , operatii , tata[100001] , inaltime[100001];

int Radacina (int nod)
{
    if (!tata[nod])
        return nod;
    
    return Radacina(tata[nod]);
}

void Uneste (int nod_1 , int nod_2)
{
    if (inaltime[nod_1] > inaltime[nod_2])
        tata[nod_2] = nod_1;
    else
        tata[nod_1] = nod_2;

    if (inaltime[nod_1] == inaltime[nod_2])
        inaltime[nod_2]++;
}

int main ()
{
    cin >> noduri >> operatii;

    int tip , nod_1 , nod_2;
    for (int indice = 1 ; indice <= operatii ; indice++)
    {
        cin >> tip >> nod_1 >> nod_2;

        if (tip == 1)
            Uneste(Radacina(nod_1) , Radacina(nod_2));
        else
            cout << (Radacina(nod_1) == Radacina(nod_2) ? "DA\n" : "NU\n");
    }

    cout.close(); cin.close();
    return 0;
}