Cod sursa(job #3271839)

Utilizator BiceaToader David Stefan Bicea Data 27 ianuarie 2025 15:13:25
Problema Paduri de multimi disjuncte Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.01 kb
#include <iostream>
#include <fstream>
using namespace std;
ifstream f("disjoint.in");
ofstream g("disjoint.out");
const int Nmax=100001;
int t[Nmax],aux,v[Nmax],h[Nmax],n,m,p,x,y,aux2;
int radacina(int x)
{int y;
    y=x;
    aux=y;
    while(h[y]!=y)
        y=t[y];
        aux2=x;
        while(x!=y)
        {
       aux=t[x];
            t[x]=y;
            x=aux;
        }
    return y;
}
void uniune(int x , int y)
{int r1 , r2;
  r1=radacina(x);
    r2=radacina(y);
    if(h[r1]>h[r2])
        t[r2]=r1;
     else
         t[r1]=r2;
     if(h[r1]==h[r2])
      h[r2]++ ;
    }
int main()
{
    f>>n>>m;
    for(int i=1;i<=n;++i)
        {t[i]=i;
        h[i]=1;
        }
    for(int i=1;i<=m;++i)
    {
        f>>p>>x>>y;
        if(p==1)
            uniune(x,y);
            else
            {
                if(radacina(x)==radacina(y))
                    g<<"DA"<<'\n';
                else
                    g<<"NU"<<'\n';
            }
    }
    return 0;
}