結果

問題 No.3263 違法な散歩道
ユーザー The_Bouningeeeen
提出日時 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
権限があれば一括ダウンロードができます

ソースコード

diff #

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);
    }
}
0