Submission #1275755

#TimeUsernameProblemLanguageResultExecution timeMemory
1275755pastaJakarta Skyscrapers (APIO15_skyscraper)C++20
100 / 100
566 ms3844 KiB
#include <bits/stdc++.h> using namespace std; typedef pair<int, int> pii; typedef long long ll; #define pb push_back #define F first #define S second #define all(x) (x).begin(),(x).end() const int maxn = 1e6 + 10; //const int maxs = 9; const int inf = 1e9 + 10; const int mod = 998244353; int n, m, b[maxn], p[maxn], d[maxn]; vector<int> G[maxn]; signed main() { cin >> n >> m; for (int i = 1; i <= m; i++) { cin >> b[i] >> p[i]; G[b[i]].pb(p[i]); } for (int i = 0; i < n; i++) { d[i] = inf; } set<pii> se; d[b[1]] = 0; se.insert({0, b[1]}); while (!se.empty()) { auto tmp = *se.begin(); se.erase(tmp); auto [d_, v] = tmp; for (int k : G[v]) { int w; w = 1; for (int u = v - k; u >= 0; u -= k) { if (d[u] > d[v] + w) { se.erase({d[u], u}); d[u] = d[v] + w; se.insert({d[u], u}); } w++; } w = 1; for (int u = v + k; u < n; u += k) { if (d[u] > d[v] + w) { se.erase({d[u], u}); d[u] = d[v] + w; se.insert({d[u], u}); } w++; } } } if (d[b[2]] >= inf) d[b[2]] = -1; cout << d[b[2]] << '\n'; }
#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...