Cod sursa(job #3293606)

Utilizator unomMirel Costel unom Data 12 aprilie 2025 09:23:39
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.24 kb
#include <fstream>

using namespace std;

ifstream f("disjoint.in");
ofstream g("disjoint.out");
int v[100005];
int dim[100005];
int n, m;

int rad(int x)
{
    if(v[x] == x)
    {
        return x;
    }
    else
    {
        int r = rad(v[x]);
        v[x] = r;
        return r;
    }
}

void reuniune(int x, int y)
{
    int rx = rad(x);
    int ry = rad(y);

    if(rx == ry)
    {
        return;
    }

    if(dim[rx] > dim[ry])
    {
        v[ry] = rx;
        dim[rx] += dim[ry];
    }
    else
    {
        v[rx] = ry;
        dim[ry] += dim[rx];
    }
}

int verif(int x, int y)
{
    int rx = rad(x);
    int ry = rad(y);

    if(rx == ry)
    {
        return 1;
    }
    else
    {
        return 0;
    }

}

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

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

    int t, x, y;
    while(m--)
    {
        f>>t>>x>>y;
        if(t == 1)
        {
            reuniune(x, y);
        }
        else
        {
            if(verif(x, y))
            {
                g<<"DA \n";
            }
            else
            {
                g<<"NU \n";
            }
        }
    }
    return 0;
}