Cod sursa(job #2856260)

Utilizator k2y201342asdfadfsafsd k2y20 Data 23 februarie 2022 17:10:17
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.01 kb
#include <bits/stdc++.h>

using namespace std;

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

const int N=1e5+5;

int t[N],rang[N];

int Radacina(int nod)
{
    if(!t[nod]) return nod;//nod este radacina

    int x=Radacina(t[nod]);//x devine radacina
    t[nod]=x;//x devine tatal direct al lui nod pentru a micsora inaltimea
    return x;
}

void Reuniune(int x,int y)
{
    int radx=Radacina(x),rady=Radacina(y);

    if(rang[radx]>rang[rady]) t[rady]=radx;
    else
    {
        t[radx]=rady;

        if(rang[radx] == rang[rady]) rang[rady]++;
    }
}

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

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

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

        if(cod == 1) Reuniune(x,y);
        else
        {
            if(Radacina(x) == Radacina(y))
                out<<"DA";
            else out<<"NU";
            out<<'\n';
        }
        //Afisare(n);
    }

    return 0;
}