Cod sursa(job #2782345)

Utilizator Ricardo14Olaru Ricardo Ricardo14 Data 12 octombrie 2021 10:57:14
Problema Paduri de multimi disjuncte Scor 40
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.78 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;

    if(h[rx]<h[ry])
    {
      tata[rx]=ry;
    }
    if(h[rx]==h[ry])
    {
        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"<<endl;
       else
       cout<<"NU"<<endl;
    }
}
    return 0;
}