Cod sursa(job #1755076)

Utilizator Harsan_SabinHarsan Sabin Harsan_Sabin Data 9 septembrie 2016 13:07:17
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.78 kb
#include <fstream>

using namespace std;

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

int n,m,op,x,y;

int Arb[100010];

int Radacina(int x)
{
    int ra=x,aux=0;

    while(Arb[ra]!=ra){ra=Arb[ra];}

    while(Arb[x]!=x){aux=Arb[x],Arb[x]=ra,x=aux;}

    return ra;
}

void Reun(int x,int y)
{
    if(x>y)
        Arb[y]=x;
    else
        Arb[x]=y;
}

int main()
{
    cin>>n>>m;

    for(int i=1;i<=n;++i)
        Arb[i]=i;

    for(int i=1;i<=m;++i)
    {
        cin>>op>>x>>y;

        if(op==1)
            Reun(Radacina(x),Radacina(y));

        if(op==2)
        {
            if(Radacina(x)==Radacina(y))
                cout<<"DA\n";
            else
                cout<<"NU\n";
        }
    }

    return 0;
}