Submission #676253

#TimeUsernameProblemLanguageResultExecution timeMemory
676253lto5Jakarta Skyscrapers (APIO15_skyscraper)C++14
36 / 100
1087 ms6816 KiB
#include <bits/stdc++.h> using namespace std; using TNode = pair<int64_t, int>; const int N = 50005; int p[N]; vector<int> g[N]; vector<int> rg[N]; int64_t d[N]; int n, m; int main() { ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); cin >> n >> m; for (int i = 0; i < m; i++) { int id_b; cin >> id_b >> p[i]; g[i].emplace_back(id_b); rg[id_b].emplace_back(i); } memset(d, 0x3f, sizeof(d)); d[0] = 0; priority_queue<TNode, vector<TNode>, greater<TNode>> pq; pq.emplace(d[0], 0); while (!pq.empty()) { int64_t du; int u; tie(du, u) = pq.top(); pq.pop(); if (d[u] != du) { continue; } if (u == 1) { cout << du; return 0; } for (int id_b : g[u]) { for (int nxt_b = id_b; nxt_b >= 0; nxt_b -= p[u]) { for (int v : rg[nxt_b]) { int cost = abs(nxt_b - id_b) / p[u]; if (d[v] > d[u] + cost) { d[v] = d[u] + cost; pq.emplace(d[v], v); } } } for (int nxt_b = id_b; nxt_b < n; nxt_b += p[u]) { for (int v : rg[nxt_b]) { int cost = abs(nxt_b - id_b) / p[u]; if (d[v] > d[u] + cost) { d[v] = d[u] + cost; pq.emplace(d[v], v); } } } } } cout << -1; return 0; }
#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...