Cod sursa(job #2447845)

Utilizator Briana_NeaguNeagu Briana Briana_Neagu Data 14 august 2019 21:27:31
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.98 kb
#include <bits/stdc++.h>

using namespace std;

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

int tata[100005], inaltime[100005];

int get_king(int x)
{
    if (tata[x] == x)
        return x;
    tata[x] =  get_king(tata[x]);
    return tata[x];
}

int main()
{
   int n, m;
   f >> n >> m;
   for (int i = 1; i <= n; ++ i)
       tata[i] = i;

   while (m --)
   {
       int cod, x, y;
       f >> cod >> x >> y;
       if (cod == 1)
       {
          int a1, a2;
          a1 = get_king(x);
          a2 = get_king(y);
          if (a1 == a2)
              continue;
          if (inaltime[a1] < inaltime[a2])
              tata[a1] = a2;

          else
              tata[a2] = a1;
          if (inaltime[a1] == inaltime[a2])
              inaltime[a1] ++;
       }
       else
       {
         int a1, a2;
         a1 = get_king(x);
         a2 = get_king(y);
         if (a1 == a2)
             g << "DA";
         else
             g << "NU";
         g << '\n';
       }
   }

}