Cod sursa(job #2450578)

Utilizator petrisorvmyVamanu Petru Gabriel petrisorvmy Data 23 august 2019 17:55:09
Problema Paduri de multimi disjuncte Scor 10
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1 kb
#include <fstream>
#define NMAX 100010

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

int n, m, task, t[NMAX], h[NMAX], a, b;

void inters(int a, int b)
{
    if(h[a] > h[b])
    {
        t[b] = a;
        h[a] += h[b];
    }
    else
    {
        t[a] = b;
        h[b] += h[a];
    }
}
int unde(int x)
{
    int radacina;
    for(radacina = x; radacina != t[radacina]; radacina = t[radacina]);

    for(int i = x; i != t[i];)
    {
        int y = t[i];
        t[i] = radacina;
        i = y;
    }
    return radacina;
}

int main()
{
    f >> n >> m;
    for(int i = 1; i <= n; ++i)
    {
        t[i] = i;
        h[i] = 1;
    }
    for(int i = 1; i <= m; ++i)
    {
        f >> task >> a >> b;
        if(task == 1)
            inters(a,b);
        else
        {
            if((unde(a) == unde(b) ))
                g << "DA\n";
            else g << "NU\n";
        }
    }
    f.close();
    g.close();
    return 0;
}