Cod sursa(job #1701429)

Utilizator cpitting_llamasRotaru Tanase Gherghina cpitting_llamas Data 13 mai 2016 01:01:05
Problema Paduri de multimi disjuncte Scor 70
Compilator cpp Status done
Runda Arhiva educationala Marime 0.88 kb
#include <fstream>
#include <iostream>
 
int father[100000];
int N, K;
 
void unite(int i, int j) {
  father[i] = j;
}
    
int find(int node) {
  if(node == father[node]) 
    return node;
        
  while(node != father[node]) 
    node = father[node];
        
  return node;
}

void init_subsets() {
  for(int i = 1; i <= N; ++i) {
    father[i] = i ;
  }
}
 
int main() {
  std::ifstream fin("disjoint.in");
  std::ofstream fout("disjoint.out");
  int i, comm, arg1, arg2;
  int father_arg1, father_arg2;
 
  fin >> N >> K;
 
  init_subsets();

  for (i = 1; i <= K; ++i) {
    fin >> comm >> arg1 >> arg2;

    father_arg1 = find(arg1);
    father_arg2 = find(arg2);
 
    if(comm == 2) {
      if (father_arg1 == father_arg2)
        fout << "DA\n";
      else
        fout << "NU\n";
    }
    else 
      unite(father_arg1, father_arg2);
  }

  fin.close();
  fout.close();

  return 0;
}