제출 #1320933

#제출 시각아이디문제언어결과실행 시간메모리
1320933kawhietJakarta Skyscrapers (APIO15_skyscraper)C++20
57 / 100
1095 ms65380 KiB
#include <bits/stdc++.h> using namespace std; #define int long long constexpr int inf = 1e18; signed main() { ios::sync_with_stdio(false); cin.tie(nullptr); int n, m; cin >> n >> m; vector<int> b(m), p(m); vector<set<int>> f(n); for (int i = 0; i < m; i++) { cin >> b[i] >> p[i]; f[b[i]].insert(p[i]); } vector<vector<array<int, 2>>> g(n); for (int i = 0; i < n; i++) { for (int j = 0; j < n; j++) { if (i == j) continue; int x = abs(i - j); vector<int> d; for (int k = 1; k * k <= x; k++) { if (x % k == 0) { d.push_back(k); d.push_back(x / k); } } sort(d.rbegin(), d.rend()); for (auto r : d) { if (f[i].count(r)) { g[i].push_back({j, x / r}); break; } } } } vector<int> d(n, inf); priority_queue<pair<int, int>, vector<pair<int, int>>, greater<pair<int, int>>> q; q.push({0, b[0]}); while (!q.empty()) { auto [dist, u] = q.top(); q.pop(); if (d[u] < dist) continue; d[u] = dist; for (auto [v, w] : g[u]) { if (dist + w < d[v]) { d[v] = dist + w; q.push({d[v], v}); } } } cout << (d[b[1]] == inf ? -1 : d[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...