Cod sursa(job #3182496)

Utilizator Rux099Vasilescu Ruxandra Rux099 Data 9 decembrie 2023 09:04:23
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.92 kb
#include <fstream>

using namespace std;

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

const int nmax = 100005;
int n, q, T[nmax], rang[nmax];

int multime(int nod)
{
    if(T[nod] != nod)
        T[nod] = multime(T[nod]);

    return T[nod];
}

void reunire(int i, int j)
{
    i = multime(i);
    j = multime(j);

    if(i == j)
        return ;

    if(rang[i] < rang[j])
        T[i] = j;
    else
        T[j] = i;

    if(rang[i] == rang[j])
        rang[i] ++;
}

void verif(int i, int j)
{
    if(multime(i) == multime(j))
        g << "DA" << '\n';
    else
        g << "NU" << '\n';
}

int main()
{
    f >> n >> q;
    for(int i = 1; i <= n; i ++)
        T[i] = i;

    for(int i = 1; i <= q; i ++)
    {
        int op, x, y;
        f >> op >> x >> y;

        if(op == 1)
            reunire(x, y);
        else
            verif(x, y);
    }
    return 0;
}