Submission #49867565
Source Code Expand
use std::{
cmp::Reverse,
collections::{BinaryHeap, HashSet},
};
use proconio::{input, marker::Usize1};
fn main() {
input! {
n: usize,
m: usize,
st: [(Usize1, Usize1); m]
};
let mut edges = vec![vec![]; n];
for (i, (s, t)) in st.into_iter().enumerate() {
edges[s].push((t, i));
}
let inf = 1_usize << 60;
let mut dist = vec![(inf, n, n); n];
dist[0] = (0_usize, 0_usize, m);
let mut pq = BinaryHeap::new();
pq.push((Reverse(0), 0));
while let Some((Reverse(d), u)) = pq.pop() {
if d > dist[u].0 {
continue;
}
for (v, i) in edges[u].iter().copied() {
let next = (dist[u].0 + 1, u, i);
if next.0 < dist[v].0 {
dist[v] = next;
pq.push((Reverse(next.0), v));
}
}
}
if dist[n - 1].0 == inf {
for _ in 0..m {
println!("-1");
}
return;
}
let mut set = HashSet::new();
let mut cur = n - 1;
while dist[cur].1 != cur {
set.insert(dist[cur].2);
cur = dist[cur].1;
}
for i in 0..m {
if set.contains(&i) {
let mut dist2 = vec![inf; n];
dist2[0] = 0_usize;
let mut pq = BinaryHeap::new();
pq.push((Reverse(0), 0));
while let Some((Reverse(d), u)) = pq.pop() {
if d > dist2[u] {
continue;
}
for (v, j) in edges[u].iter().copied() {
if i == j {
continue;
}
let next = (d + 1, v);
if next.0 < dist2[v] {
dist2[v] = next.0;
pq.push((Reverse(next.0), next.1));
}
}
}
if dist2[n - 1] == inf {
println!("-1");
} else {
println!("{}", dist2[n - 1]);
}
} else {
println!("{}", dist[n - 1].0);
}
}
}
Submission Info
| Submission Time |
|
| Task |
F - Blocked Roads |
| User |
bouzuya |
| Language |
Rust (rustc 1.70.0) |
| Score |
500 |
| Code Size |
2099 Byte |
| Status |
AC |
| Exec Time |
147 ms |
| Memory |
8600 KiB |
Judge Result
| Set Name |
Sample |
All |
| Score / Max Score |
0 / 0 |
500 / 500 |
| Status |
|
|
| Set Name |
Test Cases |
| Sample |
sample_00.txt, sample_01.txt, sample_02.txt, sample_03.txt |
| All |
case_00.txt, case_01.txt, case_02.txt, case_03.txt, case_04.txt, case_05.txt, case_06.txt, case_07.txt, case_08.txt, case_09.txt, case_10.txt, case_11.txt, case_12.txt, case_13.txt, case_14.txt, case_15.txt, case_16.txt, case_17.txt, case_18.txt, case_19.txt, case_20.txt, case_21.txt, case_22.txt, case_23.txt, case_24.txt, case_25.txt, case_26.txt, case_27.txt, sample_00.txt, sample_01.txt, sample_02.txt, sample_03.txt |
| Case Name |
Status |
Exec Time |
Memory |
| case_00.txt |
AC |
88 ms |
5568 KiB |
| case_01.txt |
AC |
89 ms |
5616 KiB |
| case_02.txt |
AC |
89 ms |
5688 KiB |
| case_03.txt |
AC |
89 ms |
5636 KiB |
| case_04.txt |
AC |
89 ms |
5656 KiB |
| case_05.txt |
AC |
89 ms |
5692 KiB |
| case_06.txt |
AC |
89 ms |
5672 KiB |
| case_07.txt |
AC |
89 ms |
5680 KiB |
| case_08.txt |
AC |
89 ms |
5532 KiB |
| case_09.txt |
AC |
89 ms |
5524 KiB |
| case_10.txt |
AC |
89 ms |
5520 KiB |
| case_11.txt |
AC |
89 ms |
5520 KiB |
| case_12.txt |
AC |
89 ms |
5512 KiB |
| case_13.txt |
AC |
89 ms |
5556 KiB |
| case_14.txt |
AC |
89 ms |
5608 KiB |
| case_15.txt |
AC |
86 ms |
5404 KiB |
| case_16.txt |
AC |
147 ms |
8600 KiB |
| case_17.txt |
AC |
70 ms |
5204 KiB |
| case_18.txt |
AC |
2 ms |
1980 KiB |
| case_19.txt |
AC |
9 ms |
2300 KiB |
| case_20.txt |
AC |
30 ms |
3344 KiB |
| case_21.txt |
AC |
5 ms |
2132 KiB |
| case_22.txt |
AC |
1 ms |
1972 KiB |
| case_23.txt |
AC |
3 ms |
2152 KiB |
| case_24.txt |
AC |
8 ms |
2456 KiB |
| case_25.txt |
AC |
28 ms |
3312 KiB |
| case_26.txt |
AC |
14 ms |
2224 KiB |
| case_27.txt |
AC |
15 ms |
2504 KiB |
| sample_00.txt |
AC |
1 ms |
1876 KiB |
| sample_01.txt |
AC |
1 ms |
1848 KiB |
| sample_02.txt |
AC |
1 ms |
1884 KiB |
| sample_03.txt |
AC |
1 ms |
1876 KiB |