【模板】迪杰斯特拉的优先队列优化
来源:互联网 发布:新网域名过户到阿里云 编辑:程序博客网 时间:2024/06/13 21:43
#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>#include<queue>using namespace std;const int SIZE=100010;int head[SIZE],n,m,s,ecnt,dis[SIZE];bool vis[SIZE];struct node{ int id,w;};struct edge{ int v,nxt,dist;}e[SIZE];bool operator <(node a,node b){ return (a.w>b.w);}void add_edge(int from,int to,int dis){ e[++ecnt]=(edge){to,head[from],dis}; head[from]=ecnt;}void dijkstra(int u){ memset(dis,0x3f,sizeof(dis)); memset(vis,0,sizeof(vis)); priority_queue<node>q; dis[u]=0; q.push((node){u,0}); while(!q.empty()) { node flag=q.top(); q.pop(); int v=flag.id; if(vis[v]) continue; vis[v]=1; for(int i=head[v];i;i=e[i].nxt) { int to=e[i].v; if(dis[to]>dis[v]+e[i].dist) { dis[to]=dis[v]+e[i].dist; q.push((node){to,dis[to]}); } } }}int main(){ scanf("%d%d%d",&n,&m,&s); for(int i=1,x,y,z;i<=m;i++) { scanf("%d%d%d",&x,&y,&z); add_edge(x,y,z); add_edge(y,x,z); } dijkstra(s); for(int i=1;i<=n;i++) printf("%d ",dis[i]); return 0;}
阅读全文
0 0
- 【模板】迪杰斯特拉的优先队列优化
- 优先队列优化的dijsktra的模板
- dijkstra+优先队列优化 模板
- sicily 1031. Campus (优先队列优化的dijistra模板)
- 用优先队列优化后的dijkstra算法模板
- 优先队列优化的迪杰斯特拉算法
- dijkstra算法模板(优先队列优化)
- 优先队列优化的dijsktra
- dijkstra的优先队列优化
- 刘汝佳 迪杰斯特拉 优先队列优化
- 优先队列优化的求最短路和次短路条数以及长度的模板
- 优先队列的使用(模板)
- 【模板】优先队列很好的用法
- 结构体 的优先队列 【模板】
- 优先队列的模板和定义
- usaco Sweet Butter(迪杰斯特拉(优先队列优化),bellman_ford算法模板)
- 【原创】最短路模板 Floyd,优先队列优化dijkstra,SPFA
- 最短路的优先队列的优化
- TensorFlow搭建RNN(2/7) 使用TensorFlow的RNN API
- Qt创建桌面快捷方式和删除桌面快捷方式
- 正则表达式
- Redis--持久化
- 总结
- 【模板】迪杰斯特拉的优先队列优化
- 第一篇博客
- 洛谷P1278 单词游戏
- Spring-Data-Redis集群配置和RedisTemplate用法
- cff学生排队201703-2
- mysql字段加密
- [iOS]数量加减按钮效果
- 以链表和数组实现并归排序的区别
- 剑指offer--面试题22:链表中倒数第k个节点