Skip to content

Commit

Permalink
typical90 013
Browse files Browse the repository at this point in the history
  • Loading branch information
bouzuya committed Feb 29, 2024
1 parent 4e6b4d0 commit 2ccc5d4
Showing 1 changed file with 36 additions and 3 deletions.
39 changes: 36 additions & 3 deletions cargo-atcoder-1.70.0/contests/typical90/src/bin/013.rs
@@ -1,10 +1,43 @@
use proconio::{input, marker::Usize1};

fn dijkstra(n: usize, inf: usize, e: &[Vec<(usize, usize)>], s: usize) -> Vec<usize> {
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,
a: [Usize1; n],
m: usize,
abc: [(Usize1, Usize1, usize); m]
};
let ans = n - a.len();
println!("{}", ans);

let mut edges = vec![vec![]; n];
for (a, b, c) in abc {
edges[a].push((b, c));
edges[b].push((a, c));
}

let inf = 1 << 60;
let dist0 = dijkstra(n, inf, &edges, 0);
let distn = dijkstra(n, inf, &edges, n - 1);
for k in 0..n {
println!("{}", dist0[k] + distn[k]);
}
}

0 comments on commit 2ccc5d4

Please sign in to comment.