Submission #66763107


Source Code Expand

Copy
use proconio::input;
fn main() {
input! {
n: usize,
m: usize,
}
let mut graph: Vec<Vec<(usize, usize)>> = vec![Vec::new(); n + 1];
for _ in 0..m {
input! {
a: usize,
b: usize,
w: usize,
}
graph[a].push((b, w));
}
// 1..vXOR
let mut dist: Vec<Option<usize>> = vec![None; n + 1];
dist[1] = Some(0);
let mut basis_vals: Vec<usize> = Vec::new();
let mut stack: Vec<usize> = vec![1];
 
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
use proconio::input;

fn main() {
    input! {
        n: usize,
        m: usize,
    }
    let mut graph: Vec<Vec<(usize, usize)>> = vec![Vec::new(); n + 1];
    for _ in 0..m {
        input! {
            a: usize,
            b: usize,
            w: usize,
        }
        graph[a].push((b, w));
    }
    // 1..vのXORの値
    let mut dist: Vec<Option<usize>> = vec![None; n + 1];
    dist[1] = Some(0);
    let mut basis_vals: Vec<usize> = Vec::new();
    let mut stack: Vec<usize> = vec![1];
    // DFSでXORの値を計算
    while let Some(u) = stack.pop() {
        let du = dist[u].unwrap();
        for &(v, w) in &graph[u] {
            match dist[v] {
                // 未訪問
                None => {
                    dist[v] = Some(du ^ w);
                    stack.push(v);
                }
                // 訪問済みならサイクルになっている
                Some(dv) => {
                    let cycle_xor = du ^ w ^ dv;
                    if cycle_xor != 0 {
                        basis_vals.push(cycle_xor);
                    }
                }
            }
        }
    }
    // 1->nへの道がないなら-1
    if dist[n].is_none() {
        println!("{}", -1);
        return;
    }
    // 上の桁から見ていって、XORを最小化する
    let mut basis: [usize; 10] = [0; 10];
    for &x in &basis_vals {
        let mut y = x;
        for b in (0..10).rev() {
            if (y & (1 << b)) != 0 {
                if basis[b] == 0 {
                    basis[b] = y;
                    break;
                } else {
                    y ^= basis[b];
                }
            }
        }
    }
    // 1->nのXORの値を求める
    let mut result = dist[n].unwrap();
    for b in (0..10).rev() {
        // 小さくなったら更新
        if basis[b] != 0 && (result ^ basis[b]) < result {
            result ^= basis[b];
        }
    }
    println!("{}", result);
}

Submission Info

Submission Time
Task D - XOR Shortest Walk
User wogikaze
Language Rust (rustc 1.70.0)
Score 0
Code Size 2029 Byte
Status WA
Exec Time 1 ms
Memory 2268 KiB

Judge Result

Set Name Sample All
Score / Max Score 0 / 0 0 / 400
Status
AC × 3
AC × 30
WA × 3
Set Name Test Cases
Sample sample_01.txt, sample_02.txt, sample_03.txt
All hand_01.txt, hand_02.txt, hand_03.txt, hand_04.txt, hand_05.txt, hand_06.txt, hand_07.txt, hand_08.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, sample_01.txt, sample_02.txt, sample_03.txt
Case Name Status Exec Time Memory
hand_01.txt AC 1 ms 2008 KiB
hand_02.txt AC 1 ms 1984 KiB
hand_03.txt AC 1 ms 1804 KiB
hand_04.txt AC 1 ms 1876 KiB
hand_05.txt AC 1 ms 2072 KiB
hand_06.txt WA 1 ms 1876 KiB
hand_07.txt WA 1 ms 1920 KiB
hand_08.txt WA 1 ms 1904 KiB
random_01.txt AC 1 ms 1924 KiB
random_02.txt AC 1 ms 2080 KiB
random_03.txt AC 1 ms 2080 KiB
random_04.txt AC 1 ms 1892 KiB
random_05.txt AC 1 ms 1908 KiB
random_06.txt AC 1 ms 1948 KiB
random_07.txt AC 1 ms 1940 KiB
random_08.txt AC 1 ms 2148 KiB
random_09.txt AC 1 ms 2072 KiB
random_10.txt AC 1 ms 2020 KiB
random_11.txt AC 1 ms 1924 KiB
random_12.txt AC 1 ms 2092 KiB
random_13.txt AC 1 ms 1820 KiB
random_14.txt AC 1 ms 2032 KiB
random_15.txt AC 1 ms 2016 KiB
random_16.txt AC 1 ms 1840 KiB
random_17.txt AC 1 ms 2036 KiB
random_18.txt AC 1 ms 2104 KiB
random_19.txt AC 1 ms 2268 KiB
random_20.txt AC 1 ms 2060 KiB
random_21.txt AC 1 ms 1956 KiB
random_22.txt AC 1 ms 2084 KiB
sample_01.txt AC 1 ms 1924 KiB
sample_02.txt AC 1 ms 1892 KiB
sample_03.txt AC 1 ms 1904 KiB


2025-06-16 (Mon)
14:17:30 +09:00