結果
| 問題 |
No.2739 Time is money
|
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2024-04-27 14:23:32 |
| 言語 | Rust (1.83.0 + proconio) |
| 結果 |
AC
|
| 実行時間 | 168 ms / 2,000 ms |
| コード長 | 1,255 bytes |
| コンパイル時間 | 13,092 ms |
| コンパイル使用メモリ | 381,276 KB |
| 実行使用メモリ | 43,532 KB |
| 最終ジャッジ日時 | 2024-11-15 16:58:17 |
| 合計ジャッジ時間 | 18,172 ms |
|
ジャッジサーバーID (参考情報) |
judge4 / judge2 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 2 |
| other | AC * 18 |
ソースコード
#![allow(unused_imports)]
//use itertools::{iproduct, Itertools};
use proconio::input;
use proconio::marker::*;
use std::collections::*;
fn main() {
use std::cmp::Reverse;
input! {
n:usize,
m:usize,
x:usize,
uvct:[(Usize1,Usize1,usize,usize);m],
}
let mut g = vec![vec![]; n];
for &(u, v, c, t) in uvct.iter() {
g[u].push((v, c, t));
g[v].push((u, c, t));
}
const INF: usize = std::usize::MAX;
let mut pq = BinaryHeap::new();
let mut times = vec![(INF, 0); n];
pq.push(Reverse((0, 0, 0)));
times[0] = (0, 0);
while let Some(Reverse((time, rem, pos))) = pq.pop() {
if times[pos] < (time, rem) {
continue;
}
for &(nxt, c, t) in g[pos].iter() {
let nxt_time = time + t + (rem + c) / x;
let nxt_rem = (rem + c) % x;
if (nxt_time, nxt_rem) < times[nxt] {
times[nxt] = (nxt_time, nxt_rem);
pq.push(Reverse((nxt_time, nxt_rem, nxt)));
}
}
}
if times[n - 1].0 == INF {
println!("-1");
} else {
println!(
"{}",
times[n - 1].0 + if times[n - 1].1 == 0 { 0 } else { 1 }
);
}
}