結果
問題 |
No.3111 Toll Optimization
|
ユーザー |
|
提出日時 | 2025-04-18 23:23:37 |
言語 | C++17 (gcc 13.3.0 + boost 1.87.0) |
結果 |
AC
|
実行時間 | 348 ms / 5,000 ms |
コード長 | 1,306 bytes |
コンパイル時間 | 2,316 ms |
コンパイル使用メモリ | 206,924 KB |
実行使用メモリ | 49,840 KB |
最終ジャッジ日時 | 2025-04-18 23:23:58 |
合計ジャッジ時間 | 11,556 ms |
ジャッジサーバーID (参考情報) |
judge4 / judge5 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 70 |
ソースコード
#include <bits/stdc++.h> using namespace std; using ll = long long; #define rep(i, n) for (int i = 0; i < (int)(n); i++) const ll INF = 1e18; void solve() { ll n, m, k; cin >> n >> m >> k; vector g(n * (k + 1), vector<pair<ll, ll>>()); { vector<ll> c(m); rep(i, m) cin >> c[i]; rep(i, m) { ll u, v; cin >> u >> v, u--, v--; rep(j, k + 1) { g[n * j + u].emplace_back(n * j + v, c[i]); g[n * j + v].emplace_back(n * j + u, c[i]); } rep(j, k) { g[n * j + u].emplace_back(n * (j + 1) + v, 0); g[n * j + v].emplace_back(n * (j + 1) + u, 0); } } } vector<ll> dist(n * (k + 1), INF); priority_queue<pair<ll, ll>> que; dist[0] = 0; que.emplace(0, 0); while (!que.empty()) { auto [d, u] = que.top(); que.pop(); d = -d; if (dist[u] < d) continue; for (const auto &[v, c] : g[u]) { if (dist[v] <= dist[u] + c) continue; dist[v] = dist[u] + c; que.emplace(-dist[v], v); } } ll ans = INF; rep(j, k + 1) ans = min(ans, dist[n * j + n - 1]); if (ans == INF) ans = -1; cout << ans << '\n'; } int main() { std::cin.tie(nullptr); std::ios_base::sync_with_stdio(false); int T = 1; for (int t = 0; t < T; t++) { solve(); } return 0; }