結果
問題 |
No.3111 Toll Optimization
|
ユーザー |
![]() |
提出日時 | 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); } }