Submission #45376

#TimeUsernameProblemLanguageResultExecution timeMemory
45376TransJakarta Skyscrapers (APIO15_skyscraper)C++14
0 / 100
6 ms3564 KiB
//https://oj.uz/problem/view/APIO15_skyscraper #include <bits/stdc++.h> using namespace std; #define rep(i, a, b) for (int i = (a); i < (b); i++) #define mp make_pair #define fi first #define se second typedef pair<int, int> pii; const int k = 200; const int oo = 1e9 + 5; const int maxn = 3e4 + 5; int n, m, d[maxn], vs[maxn], ss, ee; set<int> st[2][maxn]; int dij() { priority_queue<pii> heap; rep(i, 0, n) d[i] = oo; d[ss] = 0; heap.push(mp(0, ss)); while (!heap.empty()) { pii cur = heap.top(); cur.fi *= -1; if (cur.se == ee) return d[cur.se]; // cout << "here " << cur.se << endl; heap.pop(); for (auto it = st[1][cur.se].begin(); it != st[1][cur.se].end(); it++) { int jump = *it; int pos = cur.se % jump; for (int i = pos; i < n; i += jump) { if (d[i] > cur.fi + (cur.se - i) / jump) { d[i] = cur.fi + (cur.se - i) / jump; heap.push(mp(-d[i], i)); } } } for (auto it = st[0][cur.se].begin(); it != st[0][cur.se].end(); it++) { int jump = *it; int nxt = cur.se + jump; if (nxt < n && d[nxt] > cur.fi + 1) { d[nxt] = cur.fi + 1; heap.push(mp(-d[nxt], nxt)); st[0][nxt].insert(jump); } else { if (nxt < n && st[0][nxt].find(jump) == st[0][nxt].end()) { st[0][nxt].insert(jump); heap.push(mp(-(cur.fi + 1), nxt)); } } int pre = cur.se - jump; if (pre >= 0 && d[pre] > cur.fi + 1) { d[pre] = cur.fi + 1; heap.push(mp(-d[pre], pre)); st[0][pre].insert(jump); } else { if (pre >= 0 && st[0][pre].find(jump) == st[0][pre].end()) { st[0][pre].insert(jump); heap.push(mp(-(cur.fi + 1), pre)); } } } } return 0; } int main() { // freopen("inp.txt", "r", stdin); cin >> n >> m; rep(i, 0, m) { int x, y; cin >> x >> y; if (i == 0) ss = x; if (i == 1) ee = x; if (y <= k) st[0][x].insert(y); else st[1][x].insert(y); } cout << dij(); 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...