제출 #1192237

#제출 시각아이디문제언어결과실행 시간메모리
1192237user192837Jakarta Skyscrapers (APIO15_skyscraper)C++17
0 / 100
2 ms2376 KiB
#include <bits/stdc++.h> #define ar array #define all(x) x.begin(), x.end() using namespace std; typedef long long ll; const int N = 30005; const ll inf = 1e18; set <int> g[N]; vector <ar <int, 2>> e[N]; int main() { ios::sync_with_stdio(false); cin.tie(0); cout.tie(0); int n, m; cin >> n >> m; int strt = -1, end = -1; for (int i = 0; i < m; i++) { int b, p; cin >> b >> p; if (i == 0) strt = b; else if (i == 1) end = b; g[b].insert(p); } for (int x = 0; x < n; x++) { for (int p : g[x]) { int y = x, cnt = 0; while (y + p < n) { y += p, cnt++; if (g[y].count(p)) break; e[x].push_back({y, cnt}); } y = x, cnt = 0; while (y - p >= 0) { y -= p, cnt++; if (g[y].count(p)) break; e[x].push_back({y, cnt}); } } } vector <ll> vis(n, inf); vis[strt] = 0; priority_queue <ar <ll, 2>> q; q.push({0, strt}); while (!q.empty()) { auto now = q.top(); q.pop(); int x = now[1]; if (now[0] != vis[x]) continue; for (auto &nw : e[x]) { if (vis[nw[0]] > vis[x] + nw[1]) { vis[nw[0]] = vis[x] + nw[1]; q.push({vis[nw[0]], nw[0]}); } } } if (vis[end] == inf) cout << -1; else cout << vis[end]; }
#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...