제출 #449540

#제출 시각아이디문제언어결과실행 시간메모리
449540zxcvbnmJakarta Skyscrapers (APIO15_skyscraper)C++14
57 / 100
1094 ms24732 KiB
#include <bits/stdc++.h> using namespace std; using ll = long long; using pii = pair<int, int>; #define sky first #define pow second const int nax = 30005; const int INF = 1e9 + 5; vector<pii> adj[nax]; int main() { ios_base::sync_with_stdio(false); cin.tie(nullptr); int n, m; cin >> n >> m; vector<pii> a(m); for(auto& i : a) { cin >> i.sky >> i.pow; } set<pii> used; set<pii> all(a.begin(), a.end()); for(auto i : a) { if (used.count(i)) continue; used.insert(i); int idx = i.sky + i.pow; for(int cost = 1;;cost++) { if (idx >= n) break; adj[i.sky].push_back({idx, cost}); if (all.count({idx, i.pow})) break; // cout << i.sky << "->" << idx << " " << cost << "\n"; idx += i.pow; } idx = i.sky - i.pow; for(int cost = 1;;cost++) { if (idx < 0) break; adj[i.sky].push_back({idx, cost}); if (all.count({idx, i.pow})) break; // cout << i.sky << "->" << idx << " " << cost << "\n"; idx -= i.pow; } } vector<int> dist(n, INF); priority_queue<pii, vector<pii>, greater<pii>> q; q.push({a[0].sky, 0}); dist[a[0].sky] = 0; while(!q.empty()) { pii v = q.top(); q.pop(); // cout << v.sky << " " << v.pow << "\n"; if (dist[v.sky] < v.pow) continue; for(pii u : adj[v.sky]) { int cost = u.pow + v.pow; if (dist[u.sky] > cost) { dist[u.sky] = cost; q.push({u.sky, dist[u.sky]}); } } } cout << (dist[a[1].sky] == INF ? -1 : dist[a[1].sky]) << "\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...