Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- using namespace std;
- #define INF 1000000
- vector <int> vigilantes(vector <int> x, vector <int> y)
- {
- map<int, vector <int> > mx, my;
- vector <int> dist(x.size(), INF);
- queue <int> cola;
- for(int i=1; i<x.size(); i++)
- {
- mx[x[i]].push_back(i);
- my[y[i]].push_back(i);
- }
- cola.push(0);
- dist[0] = 0;
- while(cola.size())
- {
- int p = cola.front();
- cola.pop();
- ///Recorro los que están en el mismo X
- for(const auto &i:mx[x[p]])
- {
- dist[i] = min(dist[i], dist[p]+1);
- cola.push(i);
- }
- mx[x[p]].clear(); ///Vacío la lista para no recorrerlos infinitamente
- ///Misma lógica pero en Y
- for(const auto &i:my[y[p]])
- {
- dist[i] = min(dist[i], dist[p]+1);
- cola.push(i);
- }
- my[y[p]].clear();
- }
- for(int i=0; i<x.size(); i++)
- if(dist[i] >= INF)
- dist[i] = -1;
- return dist;
- }
- int main()
- {
- int n;
- cin >> n;
- vector <int> x(n), y(n);
- for(int i=0; i<n; i++)
- {
- cin >> x[i] >> y[i];
- }
- vector <int> dist = vigilantes(x, y);
- for(auto i:dist)
- cout << i << " ";
- cout << endl;
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment