Cod sursa(job #858622)

Utilizator costi_.-.Costinnel costi_.-. Data 19 ianuarie 2013 05:27:26
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.04 kb
#include <fstream>
#define nmax 100001
using namespace std;

int T[nmax],H[nmax];
int N,M;
//Proceduri multimi
int reprez(int x)
{
    int rad,y,t;
    y=x;

    while(T[x])
    x=T[x];

    rad=x;
    while(y!=rad)
    {
        t=T[y];
        T[y]=rad;
        y=t;
    }

    return rad;
}

void uneste(int x,int y)
{
    int rx,ry;

    rx=reprez(x);
    ry=reprez(y);
    if(rx!=ry)
    {
        if(H[rx]>H[ry])
        T[ry]=rx;
        else
        {
            T[rx]=ry;
            if(H[rx]==H[ry])
            ++H[ry];
        }
    }
}

void citeste_rezolva_scrie()
{
    ifstream f("disjoint.in");
    ofstream g("disjoint.out");
    int i,x,y,op;

    f>>N>>M;
    for(i=1;i<=M;i++)
    {
        f>>op>>x>>y;
        if(1==op)
        uneste(x,y);
        else
           if(reprez(x)==reprez(y))
               g<<"DA\n";
                   else
                    g<<"NU\n";
    }

    f.close();
    g.close();
}

int main()
{
    citeste_rezolva_scrie();
    return 0;
}