Cod sursa(job #1020919)

Utilizator dnprxDan Pracsiu dnprx Data 2 noiembrie 2013 20:40:46
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.82 kb
#include <fstream>

using namespace std;

int t[100002];

int Radacina(int i)
{
    int k;
    k = i;
    while (t[k] > 0)
        k = t[k];
    while (t[i] > 0)
    {
        t[i] = k;
        i = t[i];
    }
    return i;
}

void Unifica(int i, int j)
{
    t[i] += t[j];
    t[j] = i;
}

int main()
{
    int i, m, n, x, y, rx, ry, op;

    ifstream fin("disjoint.in");
    ofstream fout("disjoint.out");
    fin >> n >> m;
    for (i = 1; i <= n; i++)
        t[i] = -1;
    for (i = 1; i <= m; i++)
    {
        fin >> op >> x >> y;
        rx = Radacina(x);
        ry = Radacina(y);
        if (op == 1)
            Unifica(rx, ry);
        else
            if (rx == ry) fout << "DA\n";
            else fout << "NU\n";
    }

    fin.close();
    fout.close();
    return 0;
}