Submission #634481

#TimeUsernameProblemLanguageResultExecution timeMemory
634481ljubaJakarta Skyscrapers (APIO15_skyscraper)C++17
57 / 100
1093 ms46176 KiB
#include <bits/stdc++.h> using namespace std; using ll = long long; const int INF = 1e9 + 12; int main() { ios::sync_with_stdio(0); cin.tie(0); int n, m; cin >> n >> m; vector<pair<int, int>> v(m); for(auto &z : v) { cin >> z.first >> z.second; } vector<vector<pair<int, int>>> kud(n); for(auto &z : v) { kud[z.first].push_back(z); } map<pair<int, int>, int> dist; dist[v[0]] = 0; deque<pair<int, int>> q; q.push_back(v[0]); int ans = INF; while(!q.empty()) { auto tren = q.front(); q.pop_front(); // cerr << tren.first << " " << tren.second << endl; if(tren.first == v[1].first) { ans = min(ans, dist[tren]); break; } for(auto x : kud[tren.first]) { if(!dist.count(x)) { dist[x] = dist[tren]; q.push_front(x); } } kud[tren.first].clear(); auto check = [&n](pair<int, int> x) { return x.first >= 0 && x.first < n; }; pair<int, int> levo{tren.first - tren.second, tren.second}; pair<int, int> desno{tren.first + tren.second, tren.second}; if(!dist.count(levo) && check(levo)) { dist[levo] = dist[tren] + 1; q.push_back(levo); } if(!dist.count(desno) && check(desno)) { dist[desno] = dist[tren] + 1; q.push_back(desno); } } cout << ((ans >= INF) ? -1 : ans) << '\n'; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...