Cod sursa(job #1978093)

Utilizator GoogalAbabei Daniel Googal Data 6 mai 2017 22:17:48
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.96 kb
#include <fstream>
#include <vector>

using namespace std;

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

const int NMAX = 100000;

int n, m, mark[1 + NMAX], p, b, c;
vector < int > mult[1 + NMAX];

void reunion(int a, int b){
  if(mult[b].size() < mult[a].size()){
    for(int i = 0; i < mult[b].size(); i++){
      mult[a].push_back(mult[b][i]);
      mark[mult[b][i]] = a;
    }
    mult[b].clear();
  }else{
    for(int i = 0; i < mult[a].size(); i++){
      mult[b].push_back(mult[a][i]);
      mark[mult[a][i]] = b;
    }
    mult[a].clear();
  }
}

int main()
{
  in >> n >> m;
  for(int i = 1; i <= n; i++){
    mark[i] = i;
    mult[i].push_back(i);
  }

  for(int i = 1; i <= m; i++){
    in >> p >> b >> c;
    if(p == 1)
      reunion(mark[b], mark[c]);
    else{
      if(mark[b] == mark[c])
        out << "DA\n";
      else
        out << "NU\n";
    }
  }

  in.close();
  out.close();
  return 0;
}