Submission #953962

#TimeUsernameProblemLanguageResultExecution timeMemory
953962JooDdaeJakarta Skyscrapers (APIO15_skyscraper)C++17
36 / 100
335 ms262144 KiB
#include <bits/stdc++.h> using namespace std; using ll = long long; const ll INF = 1e18; int n, m, s[30030], p[30030]; ll d[30030]; vector<array<int, 2>> v[30030]; set<int> st[30030]; priority_queue<array<ll, 2>> pq; int main() { cin.tie(0)->sync_with_stdio(0); cin >> n >> m; for(int i=1;i<=m;i++) { cin >> s[i] >> p[i]; st[s[i]].insert(p[i]); } for(int i=1;i<=m;i++) { for(int j=1;;j++) { int x = s[i]-p[i]*j; if(x < 0) break; v[s[i]].push_back({x, j}); if(st[x].count(p[i])) break; } for(int j=1;;j++) { int x = s[i]+p[i]*j; if(x >= n) break; v[s[i]].push_back({x, j}); if(st[x].count(p[i])) break; } } fill(d, d+n, INF); d[s[1]] = 0, pq.push({0, s[1]}); while(!pq.empty()) { auto [c, u] = pq.top(); pq.pop(); if(-c > d[u]) continue; for(auto [x, y] : v[u]) if(y-c < d[x]) d[x] = y-c, pq.push({c-y, x}); } cout << (d[s[2]] == INF ? -1 : d[s[2]]); }
#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...