Cod sursa(job #2979887)

Utilizator TanasaStefanTanasa Stefan TanasaStefan Data 16 februarie 2023 08:23:54
Problema Paduri de multimi disjuncte Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.02 kb
#include <bits/stdc++.h>

using namespace std;

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

int n , m , t[100005] , rang[100005];

int radacina(int nod)
{
    if (t[nod] == 0)
        return nod;
    else
    {
        int k = radacina(t[nod]);
        t[nod] = k;
        return k;
    }
}

int unire(int a , int b)
{
    int ra = radacina(a);
    int rb = radacina(b);
    if(rang[ra] > rang[rb])
        t[a] = b;
    else
        t[b] = a;
    if(rang[ra] < rang[rb])
        rang[rb]++;

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

    for ( int i = 1 ; i <= m ; i++)
        {
            int c , x , y;
            f >> c >> x >> y;
            if( c == 1)
            {
                if(radacina (x) != radacina(y))
                    unire(x , y);
            }
            if( c == 2)
            {
                if( radacina(x) == radacina(y))
                    g << "DA" << '\n';
                else
                    g << "NU" << '\n';
            }
        }

}