Cod sursa(job #1815776)

Utilizator AndreiDumitrescuAndrei Dumitrescu AndreiDumitrescu Data 25 noiembrie 2016 19:22:47
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.93 kb
#include <iostream>
#include <fstream>

using namespace std;

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

int t[100001], h[100001], n , m;

int radacina(int x)
{
    if(t[x] == 0)
        return x;
    t[x] = radacina(t[x]);
    return t[x];
}

void reuniune(int x, int y)
{
    int rx = radacina(x) , ry = radacina(y);
    if(h[rx] < h[ry])
        t[rx] = ry;
    else
        if(h[rx] > h[ry])
            t[ry] = rx;
        else
            if(h[rx] == h[ry])
            {
                t[rx] = ry;
                h[ry]++;
            }
}

bool verif(int x, int y)
{
    return (radacina(x) == radacina(y));
}

int main()
{
    int  i ,j , k;
    f >> n >> m;
    while(m != 0)
    {
        f >> i >> j >> k;
        if(i == 1)
            reuniune(j, k);
        else
        {
            if(verif(j, k))
                g << "DA" << '\n';
            else
                g << "NU" << '\n';
        }
        m--;
    }

}