
【ybt高效进阶3-3-1】【luogu P4779】单源最短路径
发布日期:2021-05-07 07:00:00
浏览次数:21
分类:精选文章
本文共 1000 字,大约阅读时间需要 3 分钟。
单源最短路径
题目链接: /
题目大意
就是求一个有向图中一个点到所有点的最短距离。
思路
最短路模板题,就用 dij 加堆优化即可。
代码
#include#include #include using namespace std;struct node { int x, to, nxt;}e[200001];int n, m, s, x, y, z, le[100001], KK;long long dis[100001];bool in[100001];priority_queue , vector >, greater > > q;void add(int x, int y, int z) { e[++KK] = (node){ z, y, le[x]}; le[x] = KK;}void dij() { //dij加堆优化 memset(dis, 0x7f, sizeof(dis)); dis[s] = 0; q.push(make_pair(0, s)); while (!q.empty()) { int now = q.top().second; long long now_d = q.top().first; q.pop(); if (in[now]) continue; in[now] = 1; for (int i = le[now]; i; i = e[i].nxt) if (!in[e[i].to] && now_d + 1ll * e[i].x < dis[e[i].to]) { dis[e[i].to] = now_d + 1ll * e[i].x; q.push(make_pair(dis[e[i].to], e[i].to)); } }}int main() { scanf("%d %d %d", &n, &m, &s); for (int i = 1; i <= m; i++) { scanf("%d %d %d", &x, &y, &z); add(x, y, z); } dij(); for (int i = 1; i <= n; i++) printf("%lld ", dis[i]); return 0;}
发表评论
最新留言
不错!
[***.144.177.141]2025年04月08日 09时43分03秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
重新温习软件设计之路(4)
2021-05-09
《刷新》:拥抱同理心,建立成长型思维
2021-05-09
MVC3+NHibernate项目实战(二) :数据库访问层
2021-05-09
Flask入门
2021-05-09
MySQL数据库与python交互
2021-05-09
python如何对字符串进行html转义与反转义?
2021-05-09
开发小白也毫无压力的hexo静态博客建站全攻略 - 躺坑后亲诉心路历程
2021-05-09
java例题_24 逆向输入数字
2021-05-09
不管人生怎么走,都需要实时回头看看
2021-05-09
golang基础--类型与变量
2021-05-09
Bitcoin区块链攻击方式
2021-05-09
.NetCore外国一些高质量博客分享
2021-05-09
Mysql的基本操作(一)增、删、改
2021-05-09
解决WebRTC中不同的浏览器之间适配的问题
2021-05-09
python中while循环和for循环的定义和详细的使用方法
2021-05-09
HTML5 之拖放(drag与drop)
2021-05-09
软件项目技术点(2)——Canvas之坐标系转换
2021-05-09