Cod sursa(job #2836526)

Utilizator andu9andu nita andu9 Data 20 ianuarie 2022 16:24:35
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.06 kb
#include <fstream>

using namespace std;

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

int tata[100001], rang[100001];

int radacina (int i)
{
    int j, y;
    for (j = i; tata[j] != j; j = tata[j]);
    for (;tata[i] != i;)
    {
        y = tata[i];
        tata[i] = j;
        i = y;
    }
    return j;
}

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 (i = 1; i <= n; i += 1)
        tata[i] = i;
    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;
}