Cod sursa(job #2782349)

Utilizator Ricardo14Olaru Ricardo Ricardo14 Data 12 octombrie 2021 11:01:43
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.77 kb
#include <fstream>

using namespace std;
ifstream cin("disjoint.in");
ofstream cout("disjoint.out");
int tata[100001],h[100001];
int frad(int x)
{
    while(x!=tata[x])
    {
        x=tata[x];
    }
    return x;
}

void unire (int rx, int ry)
{
    if(h[rx]>h[ry])
    tata[ry]=rx;

    else if(h[rx]<h[ry])
    {
      tata[rx]=ry;
    }
    else
    {
        tata[rx]=ry;
        h[ry]++;
    }
}



int main()
{
int n,m,cer,a,b;
cin>>n>>m;


for(int i=1;i<=n;i++)
{
    tata[i]=i;
}

for(int i=1;i<=m;i++)
{
    cin>>cer>>a>>b;

    if(cer==1)
    {
        unire(frad(a),frad(b));
    }
    if(cer==2)
    {
       if(frad(a)==frad(b))
       cout<<"DA"<<'\n';
       else
       cout<<"NU"<<'\n';
    }
}
    return 0;
}