GastonFontenla

Untitled

Jul 19th, 2019
163
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.32 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2.  
  3. using namespace std;
  4.  
  5. #define INF 1000000
  6.  
  7. vector <int> vigilantes(vector <int> x, vector <int> y)
  8. {
  9.     map<int, vector <int> > mx, my;
  10.     vector <int> dist(x.size(), INF);
  11.     queue <int> cola;
  12.  
  13.     for(int i=1; i<x.size(); i++)
  14.     {
  15.         mx[x[i]].push_back(i);
  16.         my[y[i]].push_back(i);
  17.     }
  18.  
  19.     cola.push(0);
  20.     dist[0] = 0;
  21.  
  22.     while(cola.size())
  23.     {
  24.         int p = cola.front();
  25.         cola.pop();
  26.         ///Recorro los que están en el mismo X
  27.         for(const auto &i:mx[x[p]])
  28.         {
  29.             dist[i] = min(dist[i], dist[p]+1);
  30.             cola.push(i);
  31.         }
  32.         mx[x[p]].clear(); ///Vacío la lista para no recorrerlos infinitamente
  33.        
  34.         ///Misma lógica pero en Y
  35.         for(const auto &i:my[y[p]])
  36.         {
  37.             dist[i] = min(dist[i], dist[p]+1);
  38.             cola.push(i);
  39.         }
  40.         my[y[p]].clear();
  41.     }
  42.  
  43.     for(int i=0; i<x.size(); i++)
  44.         if(dist[i] >= INF)
  45.             dist[i] = -1;
  46.  
  47.     return dist;
  48. }
  49.  
  50. int main()
  51. {
  52.     int n;
  53.     cin >> n;
  54.     vector <int> x(n), y(n);
  55.  
  56.     for(int i=0; i<n; i++)
  57.     {
  58.         cin >> x[i] >> y[i];
  59.     }
  60.  
  61.     vector <int> dist = vigilantes(x, y);
  62.  
  63.     for(auto i:dist)
  64.         cout << i << " ";
  65.     cout << endl;
  66.  
  67.     return 0;
  68. }
Advertisement
Add Comment
Please, Sign In to add comment