Cod sursa(job #2737020)

Utilizator AndreiD31Dragan Andrei AndreiD31 Data 4 aprilie 2021 12:31:44
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.88 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;
}

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

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

int query(int nod1, int nod2)
{
    int r1=afla_radacina(nod1);
    int r2=afla_radacina(nod2);
    return (r1==r2);
}

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=query(a,b);
            if(ok)g<<"DA"<<'\n';
            else g<<"NU"<<'\n';
        }
    }
    return 0;
}