Cod sursa(job #1261936)

Utilizator marta_diannaFII Filimon Marta Diana marta_dianna Data 12 noiembrie 2014 21:01:35
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.08 kb
#include<fstream>
#define NMAX 100010

using namespace std;

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

int n, m, padure[NMAX];

int tata(int nod)
{
    if (padure[nod]>0) return tata(padure[nod]);
    return nod;
}

int uneste(int x, int y)
{
    int s, tx=tata(x), ty=tata(y);
    int aux=padure[tx]+padure[ty];

    while (x!=tx)
    {
        s=padure[x];
        padure[x]=tx;
        x=s;
    }

    while (y!=ty)
    {
        s=padure[y];
        padure[y]=ty;
        y=s;
    }

    if (padure[tx]>padure[ty])
    {
        padure[tx]=ty;
        padure[ty]=aux;
    }
    else
    {
        padure[ty]=tx;
        padure[tx]=aux;
    }
}

bool interogheaza(int x, int y)
{
    if (tata(x)==tata(y)) return 1;
    return 0;
}

int main()
{
    int op, x, y;

    f>>n>>m;

    for (int i=0; i<n; ++i) padure[i]=-1;

    while (m--)
    {
        f>>op>>x>>y;

        if (op==1) uneste(x, y);
        else if (interogheaza(x, y)) g<<"DA\n"; else g<<"NU\n";
    }

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