Cod sursa(job #2806187)

Utilizator Pop_MariaPop Maria Pop_Maria Data 22 noiembrie 2021 14:03:56
Problema Paduri de multimi disjuncte Scor 20
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.39 kb
#include <iostream>
#include <fstream>
#include <vector>

using namespace std;

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

class Graf
{
private:

    int parinte[101], dimensiune[101];

public:

    void disjoint();
    int gasire_multime(int);
    void operatie_tip_1(int, int);
};

int Graf :: gasire_multime(int a)
{
    while(a != parinte[a])
        a = parinte[a];

    return a;
}

void Graf :: operatie_tip_1(int a, int b)
{
    a = gasire_multime(a);
    b = gasire_multime(b);

    if(dimensiune[a] >= dimensiune[b])
    {
        parinte[b] = a;
        dimensiune[a] += dimensiune[b];
    }
    else
    {
        parinte[a] = b;
        dimensiune[b] += dimensiune[a];
    }
}

void Graf :: disjoint()
{
    int numar_multimi, numar_operatii, numar1, numar2, tip_operatie;

    fin >> numar_multimi >> numar_operatii;

    for(int i = 0; i < numar_multimi; i++)
    {
        dimensiune[i] = 1;
        parinte[i] = i;
    }

    for(int i = 0; i < numar_operatii; i++)
    {
        fin >> tip_operatie >> numar1 >> numar2;

        if(tip_operatie == 1)
            operatie_tip_1(numar1, numar2);

        else if(gasire_multime(numar1) == gasire_multime(numar2))
                    fout << "DA" << '\n';
        else fout << "NU" << '\n';
    }


}

int main()
{
    Graf x;
    x.disjoint();

    return 0;
}