Cod sursa(job #2945548)

Utilizator RaduIonescuRadu Ionescu RaduIonescu Data 23 noiembrie 2022 21:23:40
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.03 kb
#include <iostream>
#include <fstream>

using namespace std;

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

int n, m, parinti[100009], grupare[100009], op, x, y;

int radacina(int x)
{
    int rad,y;

    rad = x;

    while (parinti[rad]!=rad)  rad=parinti[rad];

    y=x;

    while(parinti[y]!=rad)
    {
        y=parinti[x];

        parinti[x]=rad;

        x=y;
    }

    return rad;
}

void mergeuire(int x, int y)
{
    int rad1,rad2;

    rad1=radacina(x);

    rad2=radacina(y);

    if(grupare[rad1]<grupare[rad2]) parinti[rad2]=rad1;

    else parinti[rad1]=rad2;

    if(grupare[rad1]==grupare[rad2]) grupare[rad1]++;
}

int main()
{
    in>>n>>m;

    for (int i = 1; i <= n; i++)
    {
        grupare[i]=1;

        parinti[i]=i;
    }

    for (int i = 0; i < m; i++)
    {
        in>>op>>x>>y;

        if (op == 1) mergeuire(x,y);

        else if(radacina(x)==radacina(y))  out<<"DA\n";

             else out<<"NU\n";
    }

    return 0;
}