競プロ典型 90 問
- 013 - Passing(★5)
https://atcoder.jp/contests/typical90/tasks/typical90_m
- 提出: https://atcoder.jp/contests/typical90/submissions/50728887
- 説明どおりに 1 から k 、 k から N のそれぞれの最短経路 (N - 1 個の始点) を求めると間に合わない
- 1 から 1..N 、 N から 1..N の最短経路 (2 個の始点) を求めると間に合う
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, m: usize, abc: [(Usize1, Usize1, usize); m] }; 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]); } }
今日のコミット。
- rust-atcoder 1 commit
- firestore-structured-query 5 commits
- firestore-path 2 commits
- serde-firestore-value 3 commits