GastonFontenla

Union Find

Aug 11th, 2019
162
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.09 KB | None | 0 0
  1. #include <iostream>
  2. #include <vector>
  3.  
  4. using namespace std;
  5.  
  6. vector <int> id;
  7. vector <vector <int> > comp;
  8.  
  9. bool unionFind(int a, int b)
  10. {
  11.     int idA = id[a];
  12.     int idB = id[b];
  13.  
  14.     if(idA == idB)
  15.         return false;
  16.  
  17.     int tamA = comp[idA].size();
  18.     int tamB = comp[idB].size();
  19.  
  20.     if(tamA > tamB)
  21.         return unionFind(b, a);
  22.  
  23.     for(const auto nodo:comp[idA])
  24.     {
  25.         comp[idB].push_back(nodo);
  26.         id[nodo] = idB;
  27.     }
  28.  
  29.     comp[idA].clear();
  30.  
  31.     return true;
  32. }
  33.  
  34. void prepararUnionFind(int cantNodos)
  35. {
  36.     ///Llamar a esta función antes de llamar
  37.     ///a unionFind() !!!! IMPORTANTE!!!
  38.  
  39.     ///Cada nodo pertenece a su propio grupo
  40.     comp.resize(cantNodos+1);
  41.     id.resize(cantNodos+1);
  42.  
  43.     for(int i=1; i<=cantNodos; i++)
  44.     {
  45.         comp[i].push_back(i);
  46.         id[i] = i;
  47.     }
  48. }
  49.  
  50. int main()
  51. {
  52.     ///Se lee el input
  53.     ///se procesa
  54.     ///y se imprime, según corresponda
  55.  
  56.     ///Véase el problema
  57.     ///http://juez.oia.unsam.edu.ar/#/task/conectar/statement
  58.     ///Para practicar Union Find
  59.  
  60.     return 0;
  61. }
Add Comment
Please, Sign In to add comment