結果
問題 |
No.3263 違法な散歩道
|
ユーザー |
|
提出日時 | 2025-09-09 22:35:10 |
言語 | Rust (1.83.0 + proconio) |
結果 |
AC
|
実行時間 | 39 ms / 2,000 ms |
コード長 | 1,404 bytes |
コンパイル時間 | 13,791 ms |
コンパイル使用メモリ | 383,548 KB |
実行使用メモリ | 16,228 KB |
最終ジャッジ日時 | 2025-09-09 22:35:28 |
合計ジャッジ時間 | 14,265 ms |
ジャッジサーバーID (参考情報) |
judge2 / judge |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 28 |
ソースコード
use proconio::{input, marker::Usize1}; use std::collections::VecDeque; fn main() { input! { n: usize, m: usize, uv: [(Usize1, Usize1); m], k: usize, a: [Usize1; k], } let mut graph = vec![vec![]; n]; for (u, v) in uv { graph[u].push(v); graph[v].push(u); } let mut is_yiwiy = vec![false; n]; for i in a { is_yiwiy[i] = true; } let mut visited = vec![vec![usize::MAX; n]; 5]; let mut queue = VecDeque::new(); queue.push_back((0, 0, 0)); while let Some((pos, yiwiy_count, count)) = queue.pop_front() { for &next in &graph[pos] { if is_yiwiy[next] { if yiwiy_count + 1 == 5 || visited[yiwiy_count + 1][next] <= count + 1 { continue; } visited[yiwiy_count + 1][next] = count + 1; queue.push_back((next, yiwiy_count + 1, count + 1)); } else { if visited[0][next] <= count + 1 { continue; } visited[0][next] = count + 1; queue.push_back((next, 0, count + 1)); } } } let mut ans = usize::MAX; for i in 0..5 { ans = ans.min(visited[i][n - 1]); } if ans == usize::MAX { println!("-1"); } else { println!("{}", ans); } }