Cod sursa(job #1124372)

Utilizator teo.serbanescuTeo Serbanescu teo.serbanescu Data 26 februarie 2014 12:13:30
Problema Paduri de multimi disjuncte Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 0.87 kb
#include <fstream>

using namespace std;

fstream f("disjoint.in",ios::in);
fstream g("disjoint.out",ios::out);

const int nmax=100005;

int a[nmax],r[nmax],n,m,i,x,y,op;

int parc(int nr)
{
    int k,nr1;
    k=nr;
    while (k!=a[k])
    {
        k=a[k];
    }
    while (nr!=a[nr])
    {
        nr1=a[nr];
        a[nr]=k;
        nr=nr1;
    }
    return k;
}

void uneste()
{
    if (r[x]>r[y]) a[y]=x;
            else a[x]=y;
    if (r[x]==r[y]) r[y]++;
}

int main()
{
    f>>n>>m;
    for (i=1;i<=n;i++)
    {
        a[i]=i;
        r[i]=1;
    }
    for (i=1;i<=m;i++)
    {
        f>>op>>x>>y;
        if (op==1)
        {
            uneste();
        }
        else
        {
            if (parc(x)==parc(y)) g<<"DA\n";
                        else g<<"NU\n";
        }
    }
    f.close();g.close();
    return 0;
}