Cod sursa(job #2137011)

Utilizator StepHoria Stefan Step Data 20 februarie 2018 15:24:27
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.8 kb
#include <iostream>
#include <fstream>

using namespace std;

ifstream f("disjoint.in");
ofstream g("disjoint.out");

const int N=100001;
int  h[N],t[N];

int radacina (int x)
{
    if (t[x]==0)
    {
        return x;
    }
    t[x]=radacina(t[x]);
    return t[x];
}

void unioni (int x, int y)
{
    int rx=radacina(x),ry=radacina(y);

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

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

int main()
{
    int n,m,x,y,q,i;
    f>>n>>m;
    for (i=1; i<=m; i++)
    {
        f>>q>>x>>y;
        if (q==1)
        {
            unioni(x,y);
        }
        else
        {
            if (radacina(x)==radacina(y))
                g<<"DA"<<'\n';
            else g<<"NU"<<'\n';
        }
    }
    return 0;
}