제출 #979773

#제출 시각아이디문제언어결과실행 시간메모리
979773VMaksimoski008Jakarta Skyscrapers (APIO15_skyscraper)C++17
57 / 100
1039 ms6100 KiB
#include <bits/stdc++.h> using namespace std; using pii = pair<int, int>; const int maxn = 3e4 + 5; vector<int> mp[maxn+1], B(maxn+1), P(maxn+1), dist(maxn+1, 1e9); set<int> seen[maxn+1]; int main() { ios_base::sync_with_stdio(false); cout.tie(0); cin.tie(0); int n, m; cin >> n >> m; for(int i=0; i<m; i++) { cin >> B[i] >> P[i]; if(!seen[++B[i]].count(P[i])) mp[B[i]].push_back(P[i]); seen[B[i]].insert(P[i]); } priority_queue<pii, vector<pii>, greater<pii> > pq; dist[B[0]] = 0; pq.push({ 0, B[0] }); while(!pq.empty()) { auto [d, u] = pq.top(); pq.pop(); if(d != dist[u]) continue; for(int &j : mp[u]) { int v = u + j; while(v <= n) { if(dist[v] > dist[u] + (v - u) / j) { dist[v] = dist[u] + (v - u) / j; pq.push({ dist[v], v }); } v += j; } v = u - j; while(v >= 1) { if(dist[v] > dist[u] + (u - v) / j) { dist[v] = dist[u] + (u - v) / j; pq.push({ dist[v], v }); } v -= j; } } } cout << (dist[B[1]] == 1e9 ? -1 : dist[B[1]]) << '\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...