Submission #1014278

#TimeUsernameProblemLanguageResultExecution timeMemory
1014278aufanJakarta Skyscrapers (APIO15_skyscraper)C++17
100 / 100
311 ms5836 KiB
#include <bits/stdc++.h> // #define int long long #define fi first #define se second using namespace std; const int inf = 1e9; int b[30000], p[30000], dist[30000]; vector<int> v[30000]; priority_queue<pair<int, int>, vector<pair<int, int>>, greater<pair<int, int>>> pq; int32_t main() { ios_base::sync_with_stdio(false); cin.tie(NULL); int n, m; cin >> n >> m; for (int i = 0; i < m; i++) { cin >> b[i] >> p[i]; v[b[i]].push_back(p[i]); } for (int i = 0; i < n; i++) { dist[i] = inf; sort(v[i].begin(), v[i].end()); v[i].erase(unique(v[i].begin(), v[i].end()), v[i].end()); } int ans = -1; dist[b[0]] = 0; pq.push({dist[b[0]], b[0]}); while (!pq.empty()) { auto [w, x] = pq.top(); pq.pop(); if (w > dist[x]) continue; if (x == b[1]) { ans = w; break; } for (auto k : v[x]) { int cost = w; for (int i = x + k; i < n; i += k) { cost += 1; if (cost < dist[i]) { dist[i] = cost; pq.push({dist[i], i}); } } cost = w; for (int i = x - k; i >= 0; i -= k) { cost += 1; if (cost < dist[i]) { dist[i] = cost; pq.push({dist[i], i}); } } } } cout << ans << '\n'; return 0; }
#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...