Submission #853691

#TimeUsernameProblemLanguageResultExecution timeMemory
853691NeroZeinJakarta Skyscrapers (APIO15_skyscraper)C++17
57 / 100
1047 ms67836 KiB
#include "bits/stdc++.h" using namespace std; #ifdef Nero #include "Deb.h" #else #define deb(...) #endif const int N = 30004; int b[N]; int seen[N]; vector<int> in[N]; int main(){ ios::sync_with_stdio(false); cin.tie(nullptr); int n, m; cin >> n >> m; for (int i = 0; i < m; ++i) { int p; cin >> b[i] >> p; in[b[i]].push_back(p); } fill(seen, seen + N, -1); set<pair<int, int>> vis; priority_queue<array<int, 3>> pq; for (int p : in[b[0]]) { pq.push({0, p, b[0]}); vis.emplace(p, b[0]); } seen[b[0]] = 0; while (!pq.empty()) { auto [c, p, v] = pq.top(); //deb(c); deb(p) deb(v); cout << '\n'; c = -c; pq.pop(); int forward = v + p; if (forward < n && !vis.count({p, forward})) { if (seen[forward] == -1) { seen[forward] = c + 1; for (int np : in[forward]) { vis.emplace(np, forward); pq.push({-(c + 1), np, forward}); } } vis.emplace(p, forward); pq.push({-(c + 1), p, forward}); } int backward = v - p; if (backward >= 0 && !vis.count({p, backward})) { if (seen[backward] == -1) { seen[backward] = c + 1; for (int np : in[backward]) { vis.emplace(np, backward); pq.push({-(c + 1), np, backward}); } } vis.emplace(p, backward); pq.push({-(c + 1), p, backward}); } } cout << seen[b[1]] << '\n'; 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...