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..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];
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 |
|
|
| 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 |