Submission #30006478
Source Code Expand
use proconio::{input, marker::Usize1};
fn adjacency_list(n: usize, uvw: &[(usize, usize, u64)]) -> Vec<Vec<(usize, u64)>> {
let mut e = vec![vec![]; n];
for (u, v, w) in uvw.iter().copied() {
e[u].push((v, w));
e[v].push((u, w));
}
e
}
fn dijkstra(n: usize, inf: u64, e: &[Vec<(usize, u64)>], s: usize) -> Vec<u64> {
use std::{cmp::Reverse, collections::BinaryHeap};
let mut d = vec![inf; n];
let mut pq = BinaryHeap::new();
d[s] = 0;
pq.push(Reverse((0, s)));
while let Some(Reverse((w_u, u))) = pq.pop() {
if w_u > d[u] {
continue;
}
for (v, w_v) in e[u].iter().copied() {
let w = w_u + w_v;
if w < d[v] {
d[v] = w;
pq.push(Reverse((w, v)));
}
}
}
d
}
fn main() {
input! {
n: usize,
m: usize,
abc: [(Usize1, Usize1, u64); m],
};
let edges = adjacency_list(n, &abc);
let inf = 1_u64 << 60;
let dist = dijkstra(n, inf, &edges, 0);
let ans = if dist[n - 1] == inf {
-1_i64
} else {
dist[n - 1] as i64
};
println!("{}", ans);
}
Submission Info
Judge Result
| Set Name |
Sample |
All |
| Score / Max Score |
0 / 0 |
1000 / 1000 |
| Status |
|
|
| Set Name |
Test Cases |
| Sample |
sample_01.txt, sample_02.txt |
| All |
normal_01.txt, normal_02.txt, normal_03.txt, normal_04.txt, normal_05.txt, normal_06.txt, normal_07.txt, normal_08.txt, normal_09.txt, sample_01.txt, sample_02.txt |
| Case Name |
Status |
Exec Time |
Memory |
| normal_01.txt |
AC |
11 ms |
4980 KiB |
| normal_02.txt |
AC |
98 ms |
24040 KiB |
| normal_03.txt |
AC |
36 ms |
13896 KiB |
| normal_04.txt |
AC |
192 ms |
51148 KiB |
| normal_05.txt |
AC |
75 ms |
22316 KiB |
| normal_06.txt |
AC |
2 ms |
2056 KiB |
| normal_07.txt |
AC |
2 ms |
2096 KiB |
| normal_08.txt |
AC |
2 ms |
2056 KiB |
| normal_09.txt |
AC |
2 ms |
2040 KiB |
| sample_01.txt |
AC |
4 ms |
1948 KiB |
| sample_02.txt |
AC |
2 ms |
2116 KiB |