Cod sursa(job #3120769)

Utilizator unomMirel Costel unom Data 8 aprilie 2023 14:59:01
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.13 kb
#include <fstream>

using namespace std;

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

int rad(int x)
{
    if(v[x] == 0)
    {
        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(rang[rx] > rang[ry])
    {
        v[ry] = rx;
    }
    else
    {
        v[rx] = ry;
        if(rang[rx] == rang[ry])
        {
            rang[ry]++;
        }
    }
}

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;

    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;
}