제출 #15873

#제출 시각아이디문제언어결과실행 시간메모리
15873myungwooJakarta Skyscrapers (APIO15_skyscraper)C++14
22 / 100
293 ms23164 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]; set <int> A[200][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); if (!i) S = b; if (i == 1) E = b; } for (int i=0;i<N;i++) D[i] = 2e9; priority_queue <pii> que; D[S] = 0; que.push(mp(0, S)); for (int i=0;i<N;i++) for (int j=1;j<200;j++) A[j][i%j].insert(i); while (!que.empty()){ int q = que.top().second, d = -que.top().first; que.pop(); if (D[q] != d) continue; if (q == E) break; for (int i=1;i<200;i++) A[i][q%i].erase(q); for (int p: doge[q]){ if (p > 199){ for (int i=q-p;i>=0;i-=p) if (D[i] > D[q]+(q-i)/p) D[i] = D[q]+(q-i)/p, que.push(mp(-D[i], i)); }else{ int m = q % p; for (auto it=A[p][m].begin();it!=A[p][m].end();it++){ if (D[*it] > D[q]+abs(*it-q)/p) D[*it] = D[q]+abs(*it-q)/p, que.push(mp(-D[*it], *it)); } } } } printf("%d\n", D[E] < 2e9 ? D[E] : -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...