Cod sursa(job #1124315)

Utilizator teo.serbanescuTeo Serbanescu teo.serbanescu Data 26 februarie 2014 12:04:06
Problema Paduri de multimi disjuncte Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 0.84 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;
    for (k=nr;a[k]!=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;
}