Cod sursa(job #2091795)

Utilizator Robert_VRVRobert Vadastreanu Robert_VRV Data 20 decembrie 2017 11:28:21
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.77 kb
#include <fstream>

using namespace std;

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

const int MAX_N = 100000;
int N, M, r[1 + MAX_N];

int reprezentant(int k) {
  if (r[k] != k)
    r[k] = reprezentant(r[k]);
  return r[k];
}
bool verif(int x, int y) {
  return reprezentant(x) == reprezentant(y);
}
void adauga(int x, int y) {
  x = reprezentant(x);
  y = reprezentant(y);
  r[x] = y;
}

int main() {
  fin >> N >> M;
  for (int i = 1; i <= N; i++)
    r[i] = i;
  for (int h = 1; h <= M; h++) {
    int cod, x, y;
    fin >> cod >> x >> y;
    if (cod == 1)
      adauga(x, y);
    if (cod == 2) {
      if (verif(x, y))
        fout << "DA\n";
      else fout << "NU\n";
    }
  }
  fin.close();
  fout.close();
  return 0;
}