Submission #1265394

#TimeUsernameProblemLanguageResultExecution timeMemory
1265394canhnam357Jakarta Skyscrapers (APIO15_skyscraper)C++20
22 / 100
1 ms1096 KiB
#include <bits/stdc++.h> using namespace std; int main() { ios_base::sync_with_stdio(0); cin.tie(0); int n, m; cin >> n >> m; vector<vector<int>> p(n); int f, s, z; for (int i = 0; i < m; i++) { int b, c; cin >> b >> c; if (i == 0) f = b, s = c; if (i == 1) z = b; if (c < n) p[b].push_back(c); } for (int i = 0; i < n; i++) { sort(p[i].begin(), p[i].end()); p[i].erase(unique(p[i].begin(), p[i].end()), p[i].end()); } const int inf = 1e9; const int B = 180; vector<vector<pair<int, int>>> adj(n); for (int i = 0; i < n; i++) { for (int j : p[i]) { if (j >= B) { int pos = i + j; while (pos < n) { adj[i].emplace_back(pos, (pos - i) / j); pos += j; } pos = i - j; while (pos >= 0) { adj[i].emplace_back(pos, (i - pos) / j); pos -= j; } } } while (!p[i].empty() && p[i].back() >= B) p[i].pop_back(); } vector<vector<int>> d(n, vector<int>(B, inf)); d[f][0] = 0; priority_queue<tuple<int, int, int>> q; q.emplace(0, f, 0); while (!q.empty()) { auto [dis, u, v] = q.top(); if (u == z) { cout << d[u][v]; return 0; } q.pop(); dis = -dis; if (dis != d[u][v]) continue; if (!v) { for (int i : p[u]) { if (d[u][i] > d[u][v]) { d[u][i] = d[u][v]; q.emplace(-d[u][i], u, i); } } } else { if (d[u][v] < d[u][0]) { d[u][0] = d[u][v]; q.emplace(-d[u][0], u, 0); } if (u + v < n && d[u + v][v] > d[u][v] + 1) { d[u + v][v] = d[u][v] + 1; q.emplace(-d[u + v][v], u + v, v); } if (u - v >= 0 && d[u - v][v] > d[u][v] + 1) { d[u - v][v] = d[u][v] + 1; q.emplace(-d[u - v][v], u - v, v); } } for (auto [c, w] : adj[u]) { if (d[c][0] < d[u][v] + w) { d[c][0] = d[u][v] + w; q.emplace(-d[c][0], c, 0); } } } 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...