提出 #30006478


ソースコード 拡げる

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);
}

提出情報

提出日時
問題 080 - Difference Optimization 2
ユーザ bouzuya
言語 Rust (1.42.0)
得点 1000
コード長 1182 Byte
結果 AC
実行時間 192 ms
メモリ 51148 KiB

ジャッジ結果

セット名 Sample All
得点 / 配点 0 / 0 1000 / 1000
結果
AC × 2
AC × 11
セット名 テストケース
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
ケース名 結果 実行時間 メモリ
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