Cod sursa(job #2737018)

Utilizator AndreiD31Dragan Andrei AndreiD31 Data 4 aprilie 2021 12:28:38
Problema Paduri de multimi disjuncte Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.8 kb
#include <bits/stdc++.h>

using namespace std;

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

int tata[100100],h[100100];

int afla_radacina(int nod)
{
    while(tata[nod]!=0)nod=tata[nod];
    return nod;
}

int uneste(int nod1, int nod2)
{
    int r1=afla_radacina(nod1);
    int r2=afla_radacina(nod2);

    if(r1==r2)return 1;

    if(h[r1]<h[r2])tata[r1]=r2;
    else if(h[r2]<h[r1])tata[r2]=r1;
    else tata[r2]=r1,h[r1]++;

    return 0;
}

int n,m,i,c,a,b;
int main()
{
    f>>n>>m;
    for(i=1;i<=n;i++)h[i]=1,tata[i]=0;
    for(i=1;i<=m;i++)
    {
        f>>c>>a>>b;
        if(c==1)uneste(a,b);
        else
        {
            bool ok=uneste(a,b);
            if(ok)g<<"DA"<<'\n';
            else g<<"NU"<<'\n';
        }
    }
    return 0;
}