Cod sursa(job #2722324)

Utilizator AndreiD31Dragan Andrei AndreiD31 Data 12 martie 2021 19:07:48
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.87 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[r1]=r2,h[r2]++;
}

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

    if(r1==r2)return 1;
    else return 0;
}

int n,i,m,c,x,y,ans;
int main()
{
    f>>n>>m;
    for(i=1;i<=m;i++)
    {
        f>>c>>x>>y;
        if(c==1)uneste(x,y);
        else
        {
            ans=query(x,y);
            if(ans==1)g<<"DA"<<'\n';
            else g<<"NU"<<'\n';
        }
    }
    return 0;
}