Submission #879069

#TimeUsernameProblemLanguageResultExecution timeMemory
879069PelmeniJakarta Skyscrapers (APIO15_skyscraper)C++17
100 / 100
615 ms13136 KiB
#include <bits/stdc++.h> #pragma GCC optimize("O3", "unroll-loops") using namespace std; // #define int long long typedef pair<int, int> T; const int oo = 1e9 + 7, K = 30; const int mod = 998244353; const int S = 1; void solve() { int n, m; cin >> n >> m; vector<vector<T>> g(n * S + 2); auto ch = [&](int v, int j = 0) { return v * S + j; }; vector<vector<int>> doge(n + 1); int start, kon; for (int i = 0; i < m; i++) { int v, j; cin >> v >> j; if (i == 0) start = ch(v); if (i == 1) kon = ch(v); if (j < S) g[ch(v)].emplace_back(ch(v, j), 0); else doge[v].emplace_back(j); } vector<int> dist(n * S + 2, oo); set<T> s; s.insert({0, start}); dist[start] = 0; while ((int) s.size()) { auto [d, v] = *s.begin(); s.erase(s.begin()); if (dist[v] < d) continue; auto popraw = [&](int what, int from, int c) { if (dist[what] > dist[from] + c) { dist[what] = dist[from] + c; s.insert({dist[what], what}); } }; if (v % S == 0) { int vv = v / S; for (auto j : doge[vv]) { for (int u = vv - j, k = 1; u >= 0; u -= j, k++) { popraw(ch(u), v, k); } for (int u = vv + j, k = 1; u < n; u += j, k++) { popraw(ch(u), v, k); } } } //jakies inne losowe for (auto [x, c] : g[v]) { popraw(x, v, c); } //krotkie skoki int j = v % S; if (j != 0) { int pos = v - v % S; popraw(pos, v, 0); int u = pos / S; if (u >= j) { popraw(ch(u - j, j), v, 1); } if (u + j < n) { popraw(ch(u + j, j), v, 1); } } } int ans = dist[kon]; if (ans == oo) ans = -1; cout << ans << "\n"; } int32_t main() { ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); int t = 1; //cin >> t; while (t--) solve(); return 0; }

Compilation message (stderr)

skyscraper.cpp: In function 'void solve()':
skyscraper.cpp:70:23: warning: 'kon' may be used uninitialized in this function [-Wmaybe-uninitialized]
   70 |     int ans = dist[kon];
      |                       ^
#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...