Cod sursa(job #2830912)

Utilizator andu9andu nita andu9 Data 10 ianuarie 2022 14:27:00
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.9 kb
#include <fstream>

using namespace std;

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

int tata[100001], rang[100001];

int radacina (int i)
{
    while (tata[i] > 0)
        i = tata[i];
    return i;
}

void unesc (int i, int j)
{
    int radi, radj;
    radi = radacina (i);
    radj = radacina (j);
    if (rang[radi] > rang[radj])
        tata[radj] = radi;
    else
    {
        tata[radi] = radj;
        if (rang[radi] == rang[radj])
            rang[radj] += 1;
    }
}

int main ()
{
    int n, m, intreb, i, j, k;
    f >> n >> m;
    for (k = 1; k <= m; k += 1)
    {
        f >> intreb >> i >> j;
        if (intreb == 1)
            unesc (i, j);
        else
        {
            if (radacina (i) == radacina (j))
                g << "DA";
            else
                g << "NU";
            g << '\n';
        }
    }
    return 0;
}