Cod sursa(job #2674450)

Utilizator Rares09Rares I Rares09 Data 19 noiembrie 2020 10:58:36
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.87 kb
#include <fstream>

using namespace std;

ifstream cin("disjoint.in");
ofstream cout("disjoint.out");

int n,m,v[100005],rnk[100005];

int getPar(int x)
{
    if(v[x]==x)
        return x;
    return (v[x]=getPar(v[x]));
}

void unitePar(int x, int y)
{
    int px=getPar(x);
    int py=getPar(y);
    if(rnk[px]<rnk[py])
    {
        v[px]=py;
        rnk[py]=max(rnk[py],rnk[px]+1);
    }
    else{
        v[py]=px;
        rnk[px]=max(rnk[px],rnk[py]+1);
    }
}

int main()
{
    cin>>n>>m;
    for(int i=1;i<=n;++i)
    {
        v[i]=i;
    }
    for(int i=1;i<=m;++i)
    {
        int a,b,c;
        cin>>a>>b>>c;
        if(a==2)
        {
            if(getPar(b)==getPar(c))
                cout<<"DA\n";
            else cout<<"NU\n";
        }
        else {
            unitePar(b,c);
        }
    }
    return 0;
}