Submission #68143056


Source Code Expand

use std::collections::HashSet;

use proconio::{input, marker::Usize1};

fn main() {
    input! {
        t: usize,
    };

    for _ in 0..t {
        input! {
            n: usize,
            m: usize,
            x: Usize1,
            y: Usize1,
            edges: [(Usize1, Usize1); m],
        };

        solve(n, m, x, y, edges);
    }
}

fn solve(n: usize, _m: usize, x: usize, y: usize, edges: Vec<(usize, usize)>) {
    let mut g = vec![vec![]; n];
    for &(u, v) in &edges {
        g[u].push(v);
        g[v].push(u);
    }
    for i in 0..n {
        g[i].sort_unstable();
    }

    let mut t = 1;
    let mut seen = vec![0; n];
    let mut path = vec![x];
    loop {
        let u = path.last().copied().unwrap();
        let mut next = Option::<usize>::None;
        let path_set = path.iter().copied().collect::<HashSet<_>>();
        // g[u]: sorted
        for &v in &g[u] {
            f(v, &g, &path_set, t, &mut seen);
            let reach_y = seen[y] == t;
            t += 1;
            if reach_y {
                next = Some(v);
                break;
            }
        }
        let next = next.unwrap_or_else(|| panic!("!?"));
        path.push(next);
        if next == y {
            break;
        }
    }

    println!(
        "{}",
        path.iter()
            .map(|x| (x + 1).to_string())
            .collect::<Vec<_>>()
            .join(" ")
    );
}

fn f(i: usize, g: &Vec<Vec<usize>>, path: &HashSet<usize>, t: usize, seen: &mut Vec<usize>) {
    if seen[i] == t || path.contains(&i) {
        return;
    }
    seen[i] = t;
    for &j in &g[i] {
        f(j, g, path, t, seen);
    }
}

Submission Info

Submission Time
Task E - A Path in A Dictionary
User ikd
Language Rust (rustc 1.70.0)
Score 475
Code Size 1716 Byte
Status AC
Exec Time 296 ms
Memory 4736 KiB

Judge Result

Set Name Sample All
Score / Max Score 0 / 0 475 / 475
Status
AC × 1
AC × 43
Set Name Test Cases
Sample example_00.txt
All example_00.txt, hand_00.txt, hand_01.txt, hand_02.txt, hand_03.txt, hand_04.txt, hand_05.txt, hand_06.txt, hand_07.txt, hand_08.txt, hand_09.txt, hand_10.txt, hand_11.txt, random_00.txt, random_01.txt, random_02.txt, random_03.txt, random_04.txt, random_05.txt, random_06.txt, random_07.txt, random_08.txt, random_09.txt, random_10.txt, random_11.txt, random_12.txt, random_13.txt, random_14.txt, random_15.txt, random_16.txt, random_17.txt, random_18.txt, random_19.txt, random_20.txt, random_21.txt, random_22.txt, random_23.txt, random_24.txt, random_25.txt, random_26.txt, random_27.txt, random_28.txt, random_29.txt
Case Name Status Exec Time Memory
example_00.txt AC 1 ms 2020 KiB
hand_00.txt AC 94 ms 4604 KiB
hand_01.txt AC 20 ms 2136 KiB
hand_02.txt AC 79 ms 4536 KiB
hand_03.txt AC 20 ms 2140 KiB
hand_04.txt AC 23 ms 2604 KiB
hand_05.txt AC 99 ms 4680 KiB
hand_06.txt AC 208 ms 4736 KiB
hand_07.txt AC 1 ms 2036 KiB
hand_08.txt AC 75 ms 4200 KiB
hand_09.txt AC 207 ms 4180 KiB
hand_10.txt AC 31 ms 2228 KiB
hand_11.txt AC 1 ms 1928 KiB
random_00.txt AC 1 ms 1916 KiB
random_01.txt AC 1 ms 1896 KiB
random_02.txt AC 1 ms 1904 KiB
random_03.txt AC 1 ms 1972 KiB
random_04.txt AC 1 ms 2044 KiB
random_05.txt AC 2 ms 1988 KiB
random_06.txt AC 1 ms 1952 KiB
random_07.txt AC 1 ms 2112 KiB
random_08.txt AC 2 ms 2048 KiB
random_09.txt AC 4 ms 1904 KiB
random_10.txt AC 6 ms 2132 KiB
random_11.txt AC 7 ms 2224 KiB
random_12.txt AC 1 ms 1952 KiB
random_13.txt AC 1 ms 2112 KiB
random_14.txt AC 4 ms 2072 KiB
random_15.txt AC 15 ms 2288 KiB
random_16.txt AC 18 ms 2376 KiB
random_17.txt AC 27 ms 2496 KiB
random_18.txt AC 1 ms 1936 KiB
random_19.txt AC 0 ms 1872 KiB
random_20.txt AC 245 ms 4232 KiB
random_21.txt AC 4 ms 2312 KiB
random_22.txt AC 83 ms 3784 KiB
random_23.txt AC 106 ms 4480 KiB
random_24.txt AC 1 ms 1984 KiB
random_25.txt AC 5 ms 2224 KiB
random_26.txt AC 296 ms 4092 KiB
random_27.txt AC 110 ms 4256 KiB
random_28.txt AC 40 ms 4708 KiB
random_29.txt AC 82 ms 4492 KiB