Cod sursa(job #2656712)

Utilizator Razvan48Capatina Razvan Nicolae Razvan48 Data 8 octombrie 2020 15:25:10
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1 kb
#include <fstream>

using namespace std;

const int NMAX = 100000;

int t[1 + NMAX];
int s[1 + NMAX];

int m_find(int x)
{
  if (t[x] == x)
  {
    return x;
  }

  t[x] = m_find(t[x]);

  return t[x];
}

void m_union(int x, int y)
{
  int radX = m_find(x);
  int radY = m_find(y);

  if (radX == radY)
    return;

  if (s[radX] > s[radY])
  {
    t[radY] = radX;
  }
  else
  {
    t[radX] = radY;
    if (s[radX] == s[radY])
    {
      s[radY]++;
    }
  }
}

int main()
{
  ifstream in("disjoint.in");
  ofstream out("disjoint.out");
  int n, m;

  in >> n >> m;

  for (int i = 1; i <= n; ++i)
  {
    t[i] = i;
    s[i] = 1;
  }

  for (int i = 1; i <= m; i++)
  {
    int tip, x, y;
    in >> tip >> x >> y;

    if (tip == 1)
    {
      m_union(x, y);
    }
    else
    {
      if (m_find(x) == m_find(y))
      {
        out << "DA" << '\n';
      }
      else
      {
        out << "NU" << '\n';
      }
    }
  }

  return 0;
}