Cod sursa(job #2757882)

Utilizator Florinos123Gaina Florin Florinos123 Data 7 iunie 2021 09:11:15
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.93 kb
#include <fstream>

using namespace std;

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

int n, m;

int Tata[100005];

int Rank[100005];

int Radacina (int x)
{
   if (Tata[x] == 0)
      return x;
   else
   {
       int k = Radacina(Tata[x]);
       Tata[x] = k;
       return k;
   }
}

void Unire (int x, int y)
{
    int rx = Radacina(x); int ry = Radacina(y);

    if (Rank[rx] > Rank[ry])
            Tata[ry] = rx;
    else
    {
        Tata[rx] = ry;
        if (rx == ry) Rank[ry] ++;
    }
}

int main()
{
    f >> n >> m;

    for (int i=1; i<=n; i++)
        Tata[i] = 0, Rank[i] = 1;

    for (int i=1; i<=m; i++)
    {
        int t, x, y;
        f >> t >> x >> y;
        if (t == 1) Unire(x, y);
        else
        {
            if (Radacina(x) == Radacina(y))
                g << "DA" << "\n";
            else g << "NU" << "\n";
        }
    }
    return 0;
}