AcWing
  • 首页
  • 课程
  • 题库
  • 更多
    • 竞赛
    • 题解
    • 分享
    • 问答
    • 应用
    • 校园
  • 关闭
    历史记录
    清除记录
    猜你想搜
    AcWing热点
  • App
  • 登录/注册

AcWing 850. 【算法基础课】Dijkstra求最短路 II(Dijkstra)    原题链接    简单

作者: 作者的头像   incra ,  2022-11-08 17:59:52 ,  所有人可见 ,  阅读 1070


19


<—点个赞吧QwQ

宣传一下算法基础课整理

给定一个 $n$ 个点 $m$ 条边的有向图,图中可能存在重边和自环,所有边权均为非负值。

请你求出 $1$ 号点到 $n$ 号点的最短距离,如果无法从 $1$ 号点走到 $n$ 号点,则输出 $-1$。

输入格式

第一行包含整数 $n$ 和 $m$。

接下来 $m$ 行每行包含三个整数 $x,y,z$,表示存在一条从点 $x$ 到点 $y$ 的有向边,边长为 $z$。

输出格式

输出一个整数,表示 $1$ 号点到 $n$ 号点的最短距离。

如果路径不存在,则输出 $-1$。

数据范围

$1 \le n,m \le 1.5 \times 10^5$,
图中涉及边长均不小于 $0$,且不超过 $10000$。
数据保证:如果最短路存在,则最短路的长度不超过 $10^9$。

输入样例:

3 3
1 2 2
2 3 1
1 3 4

输出样例:

3

思路

这题和$\text{Dijkstra求最短路I}$思路是一样的,就是把枚举选哪个点改成用优选队列来维护最短的长度,还要把迭代换成优先队列是否为空即可。

代码

#include <iostream>
#include <cstring>
#include <queue>
using namespace std;
typedef pair <int,int> PII;
int n,m;
const int N = 150010,M = N,INF = 0x3f3f3f3f;
int h[N],e[M],ne[M],w[M],idx;
int dist[N];
bool st[N];
void add (int a,int b,int c) {
    e[idx] = b;
    w[idx] = c;
    ne[idx] = h[a];
    h[a] = idx++;
}
int dijkstra () {
    memset (dist,0x3f,sizeof (dist));
    dist[1] = 0;
    priority_queue <PII,vector <PII>,greater <PII> > heap;
    heap.push ({0,1});
    while (heap.size ()) {
        int t = heap.top ().second;
        heap.pop ();
        if (st[t]) continue;
        st[t] = true;
        for (int i = h[t];~i;i = ne[i]) {
            int j = e[i];
            if (dist[j] > dist[t] + w[i]) {
                dist[j] = dist[t] + w[i];
                heap.push ({dist[j],j});
            }
        }
    }
    return dist[n];
}
int main () {
    memset (h,-1,sizeof (h));
    cin >> n >>m;
    while (m--) {
        int a,b,c;
        cin >> a >> b >> c;
        add (a,b,c);
    }
    int ans = dijkstra ();
    if (ans == INF) puts ("-1");
    else cout << ans << endl;
    return 0;
}

13 评论


用户头像
zeng9999jian   2023-08-05 11:10      1    踩      回复

第一眼还以为你在宣传算法基础课。


用户头像
jkjk666   2024-07-19 10:07         踩      回复

$\Large\color{blue}{【算法基础课】\text{Dijkstra}求最短路 \text{II}(\text{Dijkstra})}$


用户头像
bp55571999   2023-03-06 00:57         踩      回复

好大的标题

用户头像
incra   2023-03-06 07:29         踩      回复

hh

用户头像
incra   2023-03-06 07:29         踩      回复

markdown学一下?

用户头像
bp55571999   2023-03-06 10:45    回复了 incra 的评论         踩      回复

哈哈哈哈哈,我会写markdown的。就是感叹一下这标题忒大了,特别醒目

用户头像
incra   2023-03-06 13:17    回复了 bp55571999 的评论      1    踩      回复

hhhhh
我比较唉摆弄东西hh

用户头像
bp55571999   2023-03-06 14:58    回复了 incra 的评论         踩      回复

很酷的

用户头像
bp55571999   2023-03-06 14:58    回复了 incra 的评论         踩      回复

很酷的

用户头像
incra   2023-03-06 15:08    回复了 bp55571999 的评论         踩      回复

hh

用户头像
wqzgg   2023-03-23 20:40    回复了 bp55571999 的评论         踩      回复

$\Huge \color{blue}{【算法基础课】\text{Dijkstra}求最短路II(\text{Dijkstra})}$

用户头像
incra   2023-03-24 17:11    回复了 wqzgg 的评论      1    踩      回复

$\Large\color{blue}{【算法基础课】\text{Dijkstra}求最短路 \text{II}(\text{Dijkstra})}$

用户头像
incra   2023-03-24 17:11    回复了 incra 的评论      1    踩      回复

$\Large\color{blue}{【算法基础课】\text{Dijkstra}求最短路 \text{II}(\text{Dijkstra})}$


App 内打开
你确定删除吗?
1024
x

© 2018-2025 AcWing 版权所有  |  京ICP备2021015969号-2
用户协议  |  隐私政策  |  常见问题  |  联系我们
AcWing
请输入登录信息
更多登录方式: 微信图标 qq图标 qq图标
请输入绑定的邮箱地址
请输入注册信息