Cod sursa(job #2696465)

Utilizator yoanaIoana Grigore yoana Data 15 ianuarie 2021 22:33:33
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.9 kb
#include <fstream>
#include<vector>
using namespace std;
ifstream f("disjoint.in");
ofstream g("disjoint.out");

int v[1000003], w[100003];

int radacina(int n)
{
    if(v[n] == n)
        return n;
    return radacina(v[n]);
}

void pereche(int n1, int n2)
{
    int r1 = radacina(n1), r2 = radacina(n2);

    if(w[r1] < w[r2])
    {
        v[r1] = r2;
        w[r2] ++;
    }
    else
    {
        v[r2] = r1;
        w[r1] ++;
    }

}

int main()
{
    int n, m;
    f >> n >> m;

    for(int i = 1; i <= n; ++i)
    {
        v[i] = i;
        w[i] = 1;
    }

    for(int i = 0; i < m; ++i)
    {
        int p, x, y;
        f >> p >> x >> y;

        if (p == 1)
            pereche(x,y);
        else
        {
            if (radacina(x) == radacina(y))
                g << "DA\n";
            else
                g<< "NU\n";
        }

    }
}