Cod sursa(job #2043797)

Utilizator OldpugAlex Ionescu Oldpug Data 20 octombrie 2017 16:14:47
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.58 kb
#include <fstream>
#define var auto

using namespace std;

int *parent;

int Root(int node)
{
  int *root;
  return *(root = &parent[node]) == node ? node : *root = Root(*root);
}

void Tie(int x, int y)
{
  parent[Root(x)] = Root(y);
}

int main()
{
  ifstream in("disjoint.in");

  int n, m;
  in >> n >> m;

  parent = new int[n] - 1;
  for (var i = 1; i <= n; ++i)
    parent[i] = i;

  ofstream out("disjoint.out");

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

    if (k == 1)
      Tie(x, y);
    else
      out << (Root(x) == Root(y) ? "DA\n" : "NU\n");
  }
}