Cod sursa(job #2781842)

Utilizator Gabriel_DascalescuGabriel Dascalescu Gabriel_Dascalescu Data 10 octombrie 2021 16:47:08
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.29 kb
#include <fstream>
#define nmax 100005

using namespace std;

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

int rad[nmax], n, m, cod, x, y, nrfii[nmax], radx, rady;


int calc_rad(int a)
{
    if(rad[a]==0)
        return a;
    else
        return(calc_rad(rad[a]));
}

int main()
{
    in>>n>>m;
    for(int i=1; i<=n; i++)
    {
        nrfii[i] = 1;
    }
    for(int i=1; i<=m; i++)
    {
        in>>cod>>x>>y;
        if(cod==1)
        {
            radx = calc_rad(x) ;
            rady = calc_rad(y) ;
            if(nrfii[radx]>nrfii[rady])
            {
                nrfii[radx] += nrfii[rady];
                rad[rady] = radx;
            }
            else
                if(nrfii[radx]<nrfii[rady])
                {
                    nrfii[rady] += nrfii[radx];
                    rad[radx] = rady;
                }
                else
                    {
                        nrfii[radx] += nrfii[rady];
                        rad[rady] = radx;
                    }
        }
        if(cod==2)
        {
            radx = calc_rad(x) ;
            rady = calc_rad(y) ;
            if(radx == rady)
                out<<"DA\n";
            else
                out<<"NU\n";
        }
    }
    return 0;
}