結果

問題 No.2805 Go to School
ユーザー ikomaikoma
提出日時 2024-07-13 00:11:56
言語 Rust
(1.77.0)
結果
AC  
実行時間 304 ms / 2,000 ms
コード長 2,640 bytes
コンパイル時間 13,913 ms
コンパイル使用メモリ 394,692 KB
実行使用メモリ 49,420 KB
最終ジャッジ日時 2024-07-16 01:41:47
合計ジャッジ時間 19,868 ms
ジャッジサーバーID
(参考情報)
judge3 / judge1
このコードへのチャレンジ
(要ログイン)

テストケース

テストケース表示
入力 結果 実行時間
実行使用メモリ
testcase_00 AC 1 ms
6,812 KB
testcase_01 AC 2 ms
6,812 KB
testcase_02 AC 2 ms
6,940 KB
testcase_03 AC 2 ms
6,944 KB
testcase_04 AC 266 ms
37,128 KB
testcase_05 AC 150 ms
30,836 KB
testcase_06 AC 74 ms
16,672 KB
testcase_07 AC 86 ms
17,448 KB
testcase_08 AC 149 ms
33,132 KB
testcase_09 AC 79 ms
16,800 KB
testcase_10 AC 100 ms
17,788 KB
testcase_11 AC 295 ms
45,464 KB
testcase_12 AC 138 ms
29,808 KB
testcase_13 AC 225 ms
37,568 KB
testcase_14 AC 26 ms
9,312 KB
testcase_15 AC 1 ms
6,940 KB
testcase_16 AC 1 ms
6,940 KB
testcase_17 AC 1 ms
6,944 KB
testcase_18 AC 106 ms
23,900 KB
testcase_19 AC 67 ms
15,632 KB
testcase_20 AC 162 ms
32,032 KB
testcase_21 AC 304 ms
46,228 KB
testcase_22 AC 103 ms
21,464 KB
testcase_23 AC 151 ms
29,444 KB
testcase_24 AC 156 ms
29,132 KB
testcase_25 AC 56 ms
14,496 KB
testcase_26 AC 271 ms
49,420 KB
testcase_27 AC 138 ms
36,692 KB
testcase_28 AC 11 ms
9,008 KB
testcase_29 AC 17 ms
11,928 KB
testcase_30 AC 67 ms
24,940 KB
testcase_31 AC 90 ms
19,576 KB
testcase_32 AC 226 ms
39,536 KB
testcase_33 AC 280 ms
38,640 KB
testcase_34 AC 1 ms
6,940 KB
testcase_35 AC 1 ms
6,940 KB
testcase_36 AC 76 ms
17,084 KB
testcase_37 AC 91 ms
22,276 KB
testcase_38 AC 187 ms
38,564 KB
権限があれば一括ダウンロードができます

ソースコード

diff #

#![allow(unused_imports, dead_code, unused_macros, unused_variables, non_snake_case, unused_parens)]
use proconio::{input,marker::{Bytes, Chars, Usize1,Isize1}};
use std::ops::*;
use std::cmp::*;
use std::mem::swap;
use std::collections::*;

const MOD:u64 = 1_000_000_007;
const INF:usize = 0x3fff_ffff_ffff_ffff;

macro_rules! min {($a:expr $(,)*) => {{$a}};($a:expr, $b:expr $(,)*) => {{std::cmp::min($a, $b)}};($a:expr, $($rest:expr),+ $(,)*) => {{std::cmp::min($a, min!($($rest),+))}};}
macro_rules! max {($a:expr $(,)*) => {{$a}};($a:expr, $b:expr $(,)*) => {{std::cmp::max($a, $b)}};($a:expr, $($rest:expr),+ $(,)*) => {{std::cmp::max($a, max!($($rest),+))}};}
macro_rules! chmin {($base:expr, $($cmps:expr),+ $(,)*) => {{let cmp_min = min!($($cmps),+);if $base > cmp_min {$base = cmp_min;true} else {false}}};}
macro_rules! chmax {($base:expr, $($cmps:expr),+ $(,)*) => {{let cmp_max = max!($($cmps),+);if $base < cmp_max {$base = cmp_max;true} else {false}}};}
macro_rules! mulvec {($x:expr; $s:expr) => {vec![$x; $s]};($x:expr; $s0:expr; $( $s:expr );+) => {mulvec![vec![$x; $s0]; $( $s );+ ]};}
macro_rules! outputln {($var:expr)=>{println!("{}",$var)};($var:expr,$($vars:expr),+)=>{print!("{} ",$var);outputln!($($vars),+);};}
macro_rules! debug {($($a:expr),* $(,)*) => {eprintln!(concat!($("| ",stringify!($a), "={:?} "),*, "|"),$(&$a),*);};}


fn solve() {
    input! {
        n: usize,
        m: usize,
        l: usize,
        s: usize,
        e: usize,
		ABT:[(Usize1,Usize1,usize);m],
		T: [Usize1;l],
    }
	let mut ABT2 = HashMap::new();
	for (a,b,t) in ABT {
		if a==b{continue}
		chmin!(*ABT2.entry((a,b)).or_insert(usize::MAX), t);
	}
	let mut edge = vec!(vec![];n*2);
	for ((a,b),t) in ABT2 {
		edge[a].push((b, t));
		edge[b].push((a, t));
		edge[a+n].push((b+n, t));
		edge[b+n].push((a+n, t));
	}
	let mut toilet = vec![false;n*2];
	for t in T {
		toilet[t] = true;
	}
	let mut dist = vec![INF;n*2];
	let mut visit = vec![false;n*2];
	dist[0] = 0;
	let mut que = BinaryHeap::new();
	que.push((Reverse(0), 0));
	while let Some((Reverse(d), v)) = que.pop() {
		if visit[v] {continue}
		visit[v] = true;
		if toilet[v] && d <= s+e {
			let t2 = max!(s+1, d+1);
			if dist[v+n] > t2 {
				dist[v+n] = t2;
				que.push((Reverse(dist[v+n]), v+n));
			}
		}
		for &(w, t) in &edge[v] {
			if !visit[w] && d+t < dist[w] {
				dist[w] = d+t;
				que.push((Reverse(dist[w]), w));
			}
		}
	}
    if visit[n*2-1] {
		outputln!(dist[n*2-1]);
	}else{
		outputln!(-1);
	}
}

fn main() {
    std::thread::Builder::new()
        .stack_size(128 * 1024 * 1024)
        .spawn(|| solve()).unwrap()
        .join().unwrap();
}

0