Cod sursa(job #2423059)

Utilizator daru06Daria Culac daru06 Data 20 mai 2019 18:18:34
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.81 kb
#include <fstream>

using namespace std;

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

int i, p[100001], Rank[100001], cod, x, y, n, m, o;

int FindSet (int nod) {
  while (p[nod] != nod)
    nod = p[nod];
  return nod;
}

int FindSet2 (int nod) {
  if (p[nod] != nod)
    p[nod] = FindSet(p[nod]);
  return p[nod];
}

void Union (int r1, int r2) {
  if (Rank[r1] > Rank[r2])
    p[r2] = r1;
  else {
    p[r1] = r2;
    if (Rank[r1] == Rank[r2])
      Rank[r2]++;
  }
}

int main () {
  fin >> m >> o;
  for (i = 1; i <= m; i++)
    p[i] = i;
  while (o--) {
    fin >> cod >> x >> y;
    if (cod == 1)
      Union(FindSet2(x), FindSet2(y));
    else
      if (FindSet2(x) == FindSet2(y))
        fout << "DA\n";
      else
        fout << "NU\n";
  }
  return 0;
}