Submission #931616

#TimeUsernameProblemLanguageResultExecution timeMemory
931616dnialhJakarta Skyscrapers (APIO15_skyscraper)C++17
57 / 100
1076 ms54820 KiB
#define set unordered_set #include <iostream> #include <vector> #include <set> using namespace std; typedef long long ll; int main() {ios::sync_with_stdio(0); cin.tie(0); int n, m; cin >> n >> m; vector<vector<int>> adj(n); vector<int> sta; vector<int> power; for (int i = 0; i < m; ++i) { int bi, pi; cin >> bi >> pi; adj[bi].push_back(i); sta.push_back(bi); power.push_back(pi); } vector<int> seen(n, 0); set<ll> par; int amt = 0; vector<pair<int, int>> st; st.emplace_back(sta[0], 0); while (!seen[sta[1]]) { vector<pair<int, int>> nex; /* auto add = [&](ll u, int v) { if (0 <= u && u < n) { long long ind = u << 32LL | v; if (par.find(ind) == par.end()) { par.insert(ind); nex.push_back({u, v}); } } }; */ while (!st.empty()) { auto [loc, p] = st.back(); st.pop_back(); if (!seen[loc]) { seen[loc] = 1; for (int u : adj[loc]) { long long ind = (1LL * loc) << 32LL | (power[u]); if (par.find(ind) == par.end()) { par.insert(ind); st.push_back({loc, power[u]}); } } } ll u = loc + p; if (0 <= u && u < n) { long long ind = u << 32LL | p; if (par.find(ind) == par.end()) { par.insert(ind); nex.push_back({u, p}); } } u = loc - p; if (0 <= u && u < n) { long long ind = u << 32LL | p; if (par.find(ind) == par.end()) { par.insert(ind); nex.push_back({u, p}); } } } amt += 1; st = nex; if (st.empty() && !seen[sta[1]]) { cout << -1 << endl; exit(0); } } cout << amt - 1 << endl; 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...