제출 #539043

#제출 시각아이디문제언어결과실행 시간메모리
539043SlavicGJakarta Skyscrapers (APIO15_skyscraper)C++17
57 / 100
1095 ms16020 KiB
#include "bits/stdc++.h" using namespace std; #define ll long long #define forn(i,n) for(int i=0;i<n;i++) #define all(v) v.begin(), v.end() #define rall(v) v.rbegin(),v.rend() #define pb push_back #define sz(a) (int)a.size() const int N = 3e5 + 10; vector<pair<int, int>> adj[N]; vector<int> dog[N]; void solve() { int n, m; cin >> n >> m; vector<int> b(m), p(m); for(int i = 0;i < m; ++i) { cin >> b[i] >> p[i]; dog[b[i]].pb(i); } priority_queue<pair<int,int>> q; vector<int> dist(m, INT_MAX); dist[0] = 0; q.push({0, 0}); while(!q.empty()) { int u = q.top().second; q.pop(); int pp = b[u]; int jumps = 0; for(int v: dog[pp]) { if(dist[v] > dist[u] + jumps) { dist[v] = dist[u] + jumps; q.push({-dist[v], v}); } } while(pp + p[u] < n) { pp += p[u]; ++jumps; for(int v: dog[pp]) { if(dist[v] > dist[u] + jumps) { dist[v] = dist[u] + jumps; q.push({-dist[v], v}); } break; } } pp = b[u], jumps = 0; while(pp - p[u] >= 0) { pp -= p[u]; ++jumps; for(int v: dog[pp]) { if(dist[v] > dist[u] + jumps) { dist[v] = dist[u] + jumps; q.push({-dist[v], v}); } break; } } } if(dist[1] == INT_MAX) cout << "-1\n"; else cout << dist[1] << "\n"; } int32_t main() { ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0); int t = 1; //cin >> t; while(t--) { solve(); } }
#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...