博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【luogu P3371 单源最短路径】 模板 dij + heap
阅读量:5045 次
发布时间:2019-06-12

本文共 1305 字,大约阅读时间需要 4 分钟。

题目链接:

堆优化迪杰斯特拉,留着以后复习用

1 #include 
2 #include
3 #include
4 #include
5 #include
6 using namespace std; 7 const int inf = 2147483647; 8 const int maxn = 500001; 9 struct Edge{10 int u,v,w;11 }e[maxn];12 struct Point{13 int na,s;14 }dis[maxn];15 struct cmp{16 bool operator ()(Point &a,Point &b){17 return a.s>b.s;18 }19 };20 priority_queue
,cmp> q;21 int m, n, sta;22 int head[maxn];23 bool vis[maxn];24 int main()25 {26 scanf("%d%d%d",&n,&m,&sta);//n 点 m 边 27 for(int i = 1; i <= m; i++)28 {29 int x,y,z;30 scanf("%d%d%d",&x,&y,&z);31 e[i].u = y;32 e[i].v = head[x];33 e[i].w = z;34 head[x] = i; 35 } 36 37 for(int i = 1; i <= n; i++)38 {39 dis[i].na = i;40 dis[i].s = inf;41 }42 43 dis[sta].s = 0;44 int now = 0;45 vis[0] = 1;46 q.push(dis[sta]);47 48 for(int k = 1; k < n; k++)49 {50 while(vis[now])51 {52 now = q.top().na;53 q.pop();54 }55 vis[now] = 1;56 int c = head[now];57 while(c)58 {59 int mu = e[c].u;60 if(dis[mu].s > dis[now].s+e[c].w)61 {62 dis[mu].s = dis[now].s+e[c].w;63 q.push(dis[mu]);64 }65 c = e[c].v; 66 }67 }68 for(int i = 1; i <= n; i++)69 printf("%d ",dis[i].s);70 return 0; 71 }

 

转载于:https://www.cnblogs.com/MisakaAzusa/p/8551310.html

你可能感兴趣的文章
HTML&CSS基础学习笔记1.28-给网页添加一个css样式
查看>>
windows上面链接使用linux上面的docker daemon
查看>>
Redis事务
查看>>
Web框架和Django基础
查看>>
python中的逻辑操作符
查看>>
CSS兼容性常见问题总结
查看>>
HDU 1548 A strange lift (Dijkstra)
查看>>
每天一个小程序—0005题(批量处理图片大小)
查看>>
C# 启动进程和杀死进程
查看>>
tcp实现交互
查看>>
IIS的各种身份验证详细测试
查看>>
JavaScript特效源码(3、菜单特效)
查看>>
聊聊、Zookeeper Linux 单服务
查看>>
Linux常用命令总结
查看>>
yii模型ar中备忘
查看>>
C#线程入门
查看>>
CSS清除浮动方法
查看>>
JVM内存回收机制简述
查看>>
洛咕 P2480 [SDOI2010]古代猪文
查看>>
js-创建对象的几种方式
查看>>