Cod sursa(job #2929363)

Utilizator k20ySabaceag Marius k20y Data 25 octombrie 2022 18:26:37
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.84 kb
#include <bits/stdc++.h>
using namespace std;

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

const int N=1e5 +5;

int rang[N],tata[N];

int radacina(int nod)
{
    if(tata[nod] == nod) return nod;
    int x = radacina(tata[nod]);
    tata[nod] = x;
    return x;
}

void reuniune(int x, int y)
{
    int rad1=radacina(x),rad2=radacina(y);

     if(rang[rad1] > rang[rad2]) tata[rad2] = rad1;
     else
     {
         tata[rad1] = rad2;
         if(rang[rad1] == rang[rad2]) rang[rad2]++;
     }
}


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

    for(int i=1;i<=n;i++) tata[i]=i;

    for(int i=1;i<=m;i++)
    {
        int tip,x,y; in>>tip>>x>>y;

        if(tip == 1) reuniune(x,y);
        else
        {
            if(radacina(x) == radacina(y)) out<<"DA\n";
        else out<<"NU\n";
        }
    }
}