Submission #622482

#TimeUsernameProblemLanguageResultExecution timeMemory
622482socpiteJakarta Skyscrapers (APIO15_skyscraper)C++14
100 / 100
888 ms26948 KiB
#include<bits/stdc++.h> using namespace std; #define f first #define s second typedef long long ll; const int maxn = 3e4+5; const int inf = 2e9; int d[maxn][200], vis[maxn][200]; vector<pair<int, int>> vec[maxn]; priority_queue<pair<int, pair<int, int>>, vector<pair<int, pair<int, int>>>, greater<pair<int, pair<int, int>>>> pq; int n, m; int main(){ ios::sync_with_stdio(false); cin.tie(0); cout.tie(0); //ifstream cin("input.txt"); cin >> n >> m; for(int i = 0; i < n; i++){ for(int j = 0; j < 200; j++)d[i][j]=2e9; } for(int i = 0; i < m; i++){ int a, b; cin >> a >> b; vec[a].push_back({b, i}); if(!i){ d[a][0]=0; pq.push({0, {a, 0}}); } } int ans = -1; while(!pq.empty()){ auto x = pq.top().s; //cout << x.f << " " << x.s << endl; pq.pop(); if(vis[x.f][x.s])continue; if(x.s){ if(x.f - x.s >= 0 && d[x.f-x.s][x.s] > d[x.f][x.s] +1){ d[x.f-x.s][x.s] = d[x.f][x.s] +1; pq.push({d[x.f-x.s][x.s], {x.f-x.s, x.s}}); } if(x.f + x.s < n && d[x.f+x.s][x.s] > d[x.f][x.s] +1){ d[x.f+x.s][x.s] = d[x.f][x.s] +1; pq.push({d[x.f+x.s][x.s], {x.f+x.s, x.s}}); } if(d[x.f][0] > d[x.f][x.s]){ d[x.f][0]=d[x.f][x.s]; pq.push({d[x.f][0], {x.f, 0}}); } } else{ for(auto v: vec[x.f]){ if(v.s == 1)ans = d[x.f][0]; if(v.f < 200){ if(d[x.f][v.f] > d[x.f][0]){ d[x.f][v.f]=d[x.f][0]; pq.push({d[x.f][v.f], {x.f, v.f}}); } } else{ for(int j = 1; x.f-j*v.f >= 0; j++){ int pos = x.f-j*v.f; if(d[pos][0] > d[x.f][x.s]+j){ d[pos][0] = d[x.f][x.s]+j; pq.push({d[pos][0], {pos, 0}}); } } for(int j = 1; x.f+j*v.f < n; j++){ int pos = x.f+j*v.f; if(d[pos][0] > d[x.f][x.s]+j){ d[pos][0] = d[x.f][x.s]+j; pq.push({d[pos][0], {pos, 0}}); } } } } } } cout << ans; }
#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...