結果
| 問題 |
No.3111 Toll Optimization
|
| コンテスト | |
| ユーザー |
sai
|
| 提出日時 | 2025-04-18 21:49:23 |
| 言語 | C++23 (gcc 13.3.0 + boost 1.87.0) |
| 結果 |
AC
|
| 実行時間 | 416 ms / 5,000 ms |
| コード長 | 1,019 bytes |
| コンパイル時間 | 3,741 ms |
| コンパイル使用メモリ | 296,084 KB |
| 実行使用メモリ | 21,200 KB |
| 最終ジャッジ日時 | 2025-04-18 21:49:40 |
| 合計ジャッジ時間 | 14,630 ms |
|
ジャッジサーバーID (参考情報) |
judge1 / judge5 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 3 |
| other | AC * 70 |
ソースコード
#include <bits/stdc++.h>
int main() {
std::ios::sync_with_stdio(false);
std::cin.tie(nullptr);
const long long INF = 1LL << 60;
int n, m, k;
std::cin >> n >> m >> k;
std::vector<std::vector<std::pair<int, int>>> G(n);
std::vector<int> C(m);
for (int i = 0; i < m; i++) {
std::cin >> C[i];
}
for (int i = 0; i < m; i++) {
int u, v;
std::cin >> u >> v;
u--, v--;
G[u].emplace_back(v, C[i]);
G[v].emplace_back(u, C[i]);
}
std::vector dist(n, std::vector<long long>(k + 1, INF));
std::priority_queue<std::tuple<long long, int, int>> pq;
pq.emplace(0, 0, 0);
while (pq.size()) {
auto [c, v, p] = pq.top();
pq.pop();
c *= -1;
if (dist[v][p] > c) {
dist[v][p] = c;
for (auto [v2, d] : G[v]) {
pq.emplace(-(c + d), v2, p);
if (p < k) {
pq.emplace(-c, v2, p + 1);
}
}
}
}
long long ans = *std::min_element(dist[n - 1].begin(), dist[n - 1].end());
std::cout << (ans == INF ? -1 : ans) << '\n';
}
sai