Submission #15876

#TimeUsernameProblemLanguageResultExecution timeMemory
15876myungwooJakarta Skyscrapers (APIO15_skyscraper)C++14
57 / 100
1000 ms33440 KiB
#include <bits/stdc++.h> using namespace std; #define MAXN 30005 #define pb push_back #define mp make_pair typedef pair<int, int> pii; int N, M, S, E; int D[MAXN][200]; bool V[MAXN][200]; vector <int> doge[MAXN]; int main() { scanf("%d%d", &N, &M); for (int i=0;i<M;i++){ int b, p; scanf("%d%d", &b, &p); doge[b].pb(p); V[b][p] = 1; if (!i) S = b; if (i == 1) E = b; } for (int i=0;i<N;i++) for (int j=0;j<200;j++) D[i][j] = 2e9; priority_queue <pii> que; D[S][0] = 0; que.push(mp(0, S*200)); while (!que.empty()){ int q = que.top().second, d = -que.top().first; que.pop(); int jmp = q%200; q /= 200; if (D[q][jmp] != d) continue; if (jmp){ if (D[q][0] > d) D[q][0] = d, que.push(mp(-D[q][0], q*200)); if (q >= jmp && D[q-jmp][jmp] > d+1) D[q-jmp][jmp] = d+1, que.push(mp(-d-1, (q-jmp)*200+jmp)); if (q+jmp < N && D[q+jmp][jmp] > d+1) D[q+jmp][jmp] = d+1, que.push(mp(-d-1, (q+jmp)*200+jmp)); continue; } for (int p: doge[q]){ if (p > 199){ for (int i=q-p;i>=0;i-=p) if (D[i][0] > d+(q-i)/p) D[i][0] = d+(q-i)/p, que.push(mp(-D[i][0], i*200)); for (int i=q+p;i<N;i+=p) if (D[i][0] > d+(i-q)/p) D[i][0] = d+(i-q)/p, que.push(mp(-D[i][0], i*200)); }else{ if (D[q][p] > d) D[q][p] = d, que.push(mp(-d, q*200+p)); } } } printf("%d\n", D[E][0] < 2e9 ? D[E][0] : -1); }
#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...