Submission #539052

#TimeUsernameProblemLanguageResultExecution timeMemory
539052SlavicGJakarta Skyscrapers (APIO15_skyscraper)C++17
22 / 100
24 ms29292 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]; bool vis[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); } vector<int> dist(m, INT_MAX); dist[0] = 0; vector<int> vec[2 * n + 5]; vec[0].pb(0); for(int f = 0; f <= 2 * n; ++f) { while(sz(vec[f])) { int u = vec[f].back(); vec[f].pop_back(); if(vis[u]) continue; vis[u] = true; int pp = b[u]; int jumps = 0; for(int v: dog[pp]) { if(dist[v] > dist[u] + jumps) { dist[v] = dist[u] + jumps; vec[dist[v]].pb(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; vec[dist[v]].pb(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; vec[dist[v]].pb(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...