Submission #970899

#TimeUsernameProblemLanguageResultExecution timeMemory
970899kilkuwuJakarta Skyscrapers (APIO15_skyscraper)C++17
100 / 100
60 ms5840 KiB
#include <bits/stdc++.h> #define nl '\n' const int mxN = 30006; std::set<int> doges[mxN]; int B[mxN], P[mxN]; int N, M; signed main() { std::ios::sync_with_stdio(false); std::cin.tie(nullptr); std::cin >> N >> M; for (int i = 0; i < M; i++) { std::cin >> B[i] >> P[i]; doges[B[i]].insert(P[i]); } if (B[0] == B[1]) { std::cout << 0 << nl; return 0; } auto dijkstra = [&](int s) -> int { std::priority_queue<std::pair<int, int>> pq; std::vector<int> dp(N, 1e9); dp[s] = 0; pq.push({0, s}); while (pq.size()) { auto [d, u] = pq.top(); d = -d; pq.pop(); if (dp[u] < d) continue; for (int p : doges[u]) { for (int w = 1; u + w * p < N; w++) { int to = u + w * p; auto dd = dp[u] + w; if (dd < dp[to]) { dp[to] = dd; pq.emplace(-dp[to], to); } if (doges[to].find(p) != doges[to].end()) break; } for (int w = 1; u - w * p >= 0; w++) { int to = u - w * p; auto dd = dp[u] + w; if (dd < dp[to]) { dp[to] = dd; pq.emplace(-dp[to], to); } if (doges[to].find(p) != doges[to].end()) break; } } } return dp[B[1]] < 1e9 ? dp[B[1]] : -1; }; std::cout << dijkstra(B[0]) << nl; }
#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...