Cod sursa(job #2567588)

Utilizator spartanul300Vasile Andrei spartanul300 Data 3 martie 2020 17:55:46
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.74 kb
#include <bits/stdc++.h>

using namespace std;

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

int tata[100100],h[100100];

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

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

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

int n,m,i,x,y,op;
int main()
{
    f>>n>>m;

    for(i=1;i<=n;i++)h[i]=1,tata[i]=i;
    for(i=1;i<=m;i++)
    {
        f>>op>>x>>y;
        if(op==1)uneste(x,y);
        else
        {
            if(afla_tata(x)==afla_tata(y))g<<"DA"<<'\n';
            else g<<"NU"<<'\n';
        }
    }
    return 0;
}