Cod sursa(job #2670822)

Utilizator cristiemanuelstroe cristian emanuel cristiemanuel Data 10 noiembrie 2020 18:46:33
Problema Paduri de multimi disjuncte Scor 10
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.73 kb
#include  <fstream>
#include  <iostream>
#include  <vector>

using namespace std;

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

const int Nmax = 1e5 + 5;
int N;
int T[Nmax];

void unire(int x, int y)
{
  T[x] = y;
}

int radacina(int nod)
{
  int rad = nod;
  while(T[rad] != rad)
    rad = T[rad];
  int y = T[nod];
  while(T[nod] != rad)
  {
    unire(nod, rad);
    nod = y;
  }
  return rad;
}

int main()
{
  in>>N;
  int t;
  for(int i = 1; i <= N; i++)
    T[i] = i;
  for(in>>t; t; t--)
  {
    int x, y, op;
    in>>op>>x>>y;
    if(op == 1)
    {
      unire(x, y);
    }
    else
    {
      int X = radacina(x);
      int Y = radacina(y);
      if(X == Y)
        out<<"DA\n";
      else
        out<<"NU\n";
    }
  }
}