Cod sursa(job #1824208)

Utilizator maryan_lupMarian Lupascu maryan_lup Data 7 decembrie 2016 15:30:36
Problema Paduri de multimi disjuncte Scor 70
Compilator cpp Status done
Runda Arhiva educationala Marime 1.03 kb
#include <bits/stdc++.h>
#define DIMMAX 100005
#define FOR(i, a, b) for(int i = a; i <= b; i++)

using namespace std;

int n, m;
struct noduri
{
    int valoare;
    int tata;
}nod[DIMMAX];

int det_radacina(int x)
{
    if(nod[x].tata == -1)
        return x;
    else
        return det_radacina(nod[x].tata);
}

int main()
{
    ifstream f("disjoint.in");
    ofstream g("disjoint.out");
    f >> n >> m;

    FOR(i, 1, n)
    {
        nod[i].valoare = i;
        nod[i].tata = -1;
    }

    FOR(i, 1, m)
    {
        int tip, x, y;
        f >> tip >> x >> y;
        int radacina_x = det_radacina(x);
        int radacina_y = det_radacina(y);

        if(tip == 1)
            nod[radacina_x].tata = radacina_y;
        else
            if(tip == 2)
            {
                int aux;
                if(radacina_x == radacina_y)
                    g << "DA\n";
                else
                    g << "NU\n";
            }
    }
    f.close();
    g.close();
    return 0;
}