Cod sursa(job #1967886)

Utilizator AlexandruLuchianov1Alex Luchianov AlexandruLuchianov1 Data 17 aprilie 2017 11:38:40
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.07 kb
#include <iostream>
#include <fstream>
#include <vector>

using namespace std;
ifstream in ("disjoint.in");
ofstream out ("disjoint.out");

int const nmax = 100000;
vector <vector <int>> mult;
int v[5 + nmax];
void reunion(int gala ,int galb){
  if(gala != galb){
    if(mult[gala].size() <= mult[galb].size()){

      for(int i = 0 ; i < mult[gala].size() ;i++){
        mult[galb].push_back(mult[gala][i]);
        v[mult[gala][i]] = galb;
      }

      mult[gala].clear();
    } else{
      for(int i = 0 ; i < mult[galb].size() ;i++){
        mult[gala].push_back(mult[galb][i]);
        v[mult[galb][i]] = gala;
      }
      mult[galb].clear();
    }
  }
}
int main()
{
  int n ,m;
  in>>n>>m;

  for(int i = 0 ; i <= n ;i++){
    v[i] = i;
    vector<int> temp;
    temp.push_back(i);
    mult.push_back(temp);
  }
  int p ,x , y;
  for(int i = 0 ; i < m ;i++){
    in>>p>>x>>y;
    if(p == 1){
      reunion(v[x],v[y]);
    }else{
      if(v[x] != v[y])
        out<<"NU\n";
      else
        out<<"DA\n";
    }
  }

  return 0;
}