제출 #853685

#제출 시각아이디문제언어결과실행 시간메모리
853685NeroZeinJakarta Skyscrapers (APIO15_skyscraper)C++17
0 / 100
1 ms1168 KiB
#include "bits/stdc++.h" using namespace std; #ifdef Nero #include "Deb.h" #else #define deb(...) #endif const int N = 30004; 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 v, p; cin >> v >> p; in[v].push_back(p); } fill(seen, seen + N, -1); set<pair<int, int>> vis; priority_queue<array<int, 3>> pq; for (int p : in[0]) { pq.push({p, 0, 0}); vis.emplace(p, 0); } seen[0] = 0; while (!pq.empty()) { auto [p, c, v] = pq.top(); c = -c; //deb(p) deb(c) deb(v) cout << endl; //assert(v >= 0); 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({np, -(c + 1), forward}); } } vis.emplace(p, forward); pq.push({p, -(c + 1), 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({np, -(c + 1), backward}); } vis.emplace(p, backward); pq.push({p, -(c + 1), backward}); } } cout << seen[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...