Cod sursa(job #2696276)

Utilizator paulconst1Constantinescu Paul paulconst1 Data 15 ianuarie 2021 17:26:28
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.97 kb
#include <iostream>
#include <fstream>

using namespace std;

ifstream fin("disjoint.in");
ofstream fout("disjoint.out");

int tata[100001], ct[100001], i, n, m, t;
int radacina(int nod)
{
    if(tata[nod] != nod)
        tata[nod] = radacina(tata[nod]);
    return tata[nod];
}

void unire(int x, int y)
{
    x = radacina(x);
    y = radacina(y);
    if(x != y)
    {
        if(ct[x] > ct[y])
        {
            ct[x] = ct[x] + ct[y];
            tata[y] = x;
        }
        else
        {
            ct[y] = ct[y] + ct[x];
            tata[x] = y;
        }
    }

}
int main()
{

    int x, y;
    fin >> n >> m;

    for(i = 1; i <= n; ++ i)
    {
        tata[i] = i;
        ct[i] = 1;
    }

    for(i = 1; i <= m; ++ i)
    {
        fin >> t >> x >> y;
        if(t == 1)
            unire(x, y);
        else if(radacina(x) == radacina(y)) fout << "DA" << '\n';
        else fout << "NU" << "\n";
    }
    return 0;
}