結果
| 問題 |
No.3111 Toll Optimization
|
| コンテスト | |
| ユーザー |
lumc_
|
| 提出日時 | 2025-04-19 19:41:47 |
| 言語 | Rust (1.83.0 + proconio) |
| 結果 |
TLE
|
| 実行時間 | - |
| コード長 | 1,636 bytes |
| コンパイル時間 | 13,304 ms |
| コンパイル使用メモリ | 387,748 KB |
| 実行使用メモリ | 21,248 KB |
| 最終ジャッジ日時 | 2025-04-19 19:42:09 |
| 合計ジャッジ時間 | 21,635 ms |
|
ジャッジサーバーID (参考情報) |
judge1 / judge3 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | -- * 3 |
| other | AC * 5 TLE * 1 -- * 64 |
ソースコード
#![allow(
dead_code,
non_snake_case,
unused_imports,
unused_mut,
unused_variables,
while_true,
unused_assignments,
clippy::needless_range_loop,
clippy::ptr_arg,
clippy::type_complexity,
clippy::unnecessary_cast
)]
use proconio::{
input,
marker::{Chars, Usize1 as usize1},
};
use std::collections::{BinaryHeap, HashMap, HashSet, VecDeque};
fn main() {
input! {
N: usize,
M: usize,
K: usize,
C: [u64; M],
uv: [(usize1, usize1); M],
};
let mut g = vec![vec![]; N];
for i in 0..M {
let (u, v) = uv[i];
g[u].push((v, C[i]));
g[v].push((u, C[i]));
}
// dijkstra
let mut pq = BinaryHeap::new();
let mut dist = vec![vec![u64::MAX; K + 1]; N];
pq.push((0i64, 0, 0));
dist[0][0] = 0;
while let Some((neg_cost, v, k)) = pq.pop() {
let cost = (-neg_cost) as u64;
for &(u, c) in g[v].iter() {
for use_ticket in [0, 1] {
let nk = if use_ticket == 0 { k } else { k + 1 };
let w = if use_ticket == 0 { c } else { 0 };
if nk > K {
continue;
}
let ncost = cost + w as u64;
if dist[u][nk] > ncost {
dist[u][nk] = ncost;
pq.push((-(ncost as i64), u, nk));
}
}
}
}
let mut ans = u64::MAX;
for ticket in 0..=K {
ans = ans.min(dist[N - 1][ticket]);
}
if ans == u64::MAX {
println!("-1");
} else {
println!("{}", ans);
}
}
lumc_