Cod sursa(job #2915268)

Utilizator ana_madalina_18Radu Ana Madalina ana_madalina_18 Data 22 iulie 2022 11:06:49
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.13 kb
#include <iostream>
#include <fstream>
using namespace std;
ifstream fin("disjoint.in");
ofstream fout("disjoint.out");
int n, m;
int tata[100009], adancime[100009];
int radacina(int nod)
{
    if(tata[nod]==nod)
    {
        return nod;
    }
    return tata[nod] = radacina(tata[nod]);
}
void adaug(int a, int b)
{
    int rad_a = radacina(a);
    int rad_b = radacina(b);
    if(rad_a==rad_b)
    {
        return;
    }
    if(adancime[rad_a]>=adancime[rad_b])
    {
        //devine rad_a
        tata[rad_b]=rad_a;
    }
    else
    {
        tata[rad_a]=rad_b;
    }
    if(adancime[rad_a]==adancime[rad_b])
    {
        adancime[rad_a]++;
    }
}
int main()
{
    fin>>n>>m;
    for(int i=1;i<=n;i++)
    {
        tata[i]=i;
        adancime[i]=1;
    }
    for(int i=1;i<=m;i++)
    {
        int a, b;
        int op;
        fin>>op>>a>>b;
        if(op==1)
        {
            adaug(a,b);
        }
        else if(radacina(a)==radacina(b))
        {
            fout<<"DA"<<'\n';
        }
        else
        {
            fout<<"NU"<<'\n';
        }
    }
    return 0;
}