主要是记得传比较算子进去,优先队列要的那个算子参数大概是用来定义优先级的,默认是less,大概是优先级低的先出队。想要从小到大排序要传greater进去。

 1     priority_queue< edge,vector<edge>,greater<edge> > Q;
 2     Q.push(make_pair(0,1));dis[1]=0;
 3     while(!Q.empty()){
 4         int u=Q.top().second;Q.pop();
 5         if(finish[u])continue;
 6         cout<<u<<','<<dis[u]<<endl;
 7         finish[u]=1;
 8
 9         for(vector< edge >::iterator ite=G[u].begin();ite!=G[u].end();ite++){
10             int w=ite->second,v=ite->first;
11             if(dis[u]+w<dis[v]){
12                 dis[v]=dis[u]+w;
13                 Q.push(make_pair(dis[v],v));
14             }
15         }
16     }

poj2442 Sequence

http://poj.org/problem?id=2442

先看只有两组数列的情况,考虑这样一个事实,因为两组合并时产生的n*n个数字中,前n个小的一定比其他的更优,所以考虑一组一组处理,先将第一二组处理,然后用处理的结果跟第三组处理。第一遍写将n*n个数组进行了sort,tle,然后用了堆,保持堆的元素个数是n,复杂度从O(m*n^2*log n*n )变成O(m*n^2*logn)

 1 #include <cstdio>
 2 #include <algorithm>
 3 #include <queue>
 4
 5 using namespace std;
 6
 7 const int maxn = 2000+10;
 8
 9 int v[2][maxn],A[maxn*maxn];
10
11 int main(int argc, char const *argv[])
12 {
13     int T;scanf("%d",&T);
14     while(T--){
15         int m,n;
16         scanf("%d%d",&m,&n);
17         for(int i=0;i<n;i++)
18             scanf("%d",&v[0][i]);
19
20         priority_queue< int > Q;
21
22         for(int ord=1;ord<m;ord++){
23             for(int i=0;i<n;i++){
24                 scanf("%d",&v[1][i]);
25                 for(int j=0;j<n;j++){
26                     int A=v[1][i]+v[0][j];
27                     if(Q.size()<n)
28                         Q.push(A);
29                     else{
30                         if(A<Q.top()){
31                             Q.pop();
32                             Q.push(A);
33                         }
34                     }
35                 }
36             }
37             for(int i=0;i<n;i++){
38                 v[0][i]=Q.top();
39                 Q.pop();
40             }
41         }
42         for(int i=n-1;i>=0;i--)
43             printf("%d%c",v[0][i]," \n"[i==0]);
44     }
45     return 0;
46 }

转载于:https://www.cnblogs.com/lijianlin1995/p/3616992.html

使用priority_queue实现Dijkstra相关推荐

  1. 一句话题解(20170801~20170125)

    8.1 bzoj 4720 noip2016 换教室 floyd预处理+期望(薛定谔的猫) bzoj 4318 OSU! 三次函数期望值 从一次.二次推得 8.2 bzoj 1076 状压+期望DP ...

  2. 几道pb_ds模板题

    冬令营上有人讲了这个,看上去很省事的样子,所以来学习一个 1:COGS 2.旅行计划 题目地址: http://cogs.pro/cogs/problem/problem.php?pid=2 求起点到 ...

  3. 图论01.最短路专题_学习笔记+模板

    图论01.最短路专题_学习笔记+模板 一.定义与性质 ● 需要的前导知识点 路径 最短路 有向图中的最短路.无向图中的最短路 单源最短路.每对结点之间的最短路 ● 最短路的性质 对于边权为正的图,任意 ...

  4. 【HDU/算法】最短路问题 杭电OJ 2544 (Dijkstra,Dijkstra+priority_queue,Floyd,Bellman_ford,SPFA)

    最短路径问题是图论中很重要的问题. 解决最短路径几个经典的算法 1.Dijkstra算法 单源最短路径(贪心),还有用 priority_queue 进行优化的 Dijkstra 算法. 2.bell ...

  5. dijkstra+priority_queue+vector

    最短路 时间限制: 3 Sec  内存限制: 128 MB 题目描述 给定M条边,N个点的带权无向图  求1到N的最短路  N<=100000  M<=500000 输入 第一行:N,M  ...

  6. Codeforces.1051F.The Shortest Statement(最短路Dijkstra)

    题目链接 先随便建一棵树. 如果两个点(u,v)不经过非树边,它们的dis可以直接算. 如果两个点经过非树边呢?即它们一定要经过该边的两个端点,可以直接用这两个点到 u,v 的最短路更新答案. 所以枚 ...

  7. 使用最小堆优化Dijkstra算法

    OJ5.2很简单,使用priority_queue实现了最小堆竟然都过了OJ--每次遇到relax的问题时都简单粗暴地重新push进一个节点-- 然而正确的实现应该是下面这样的吧,关键在于swap堆中 ...

  8. 图论-最短路Dijkstra算法详解超详 有图解

    整体来看dij就是从起点开始扩散致整个图的过程,为什么说他稳定呢,是因为他每次迭代,都能得到至少一个结点的最短路.(不像SPFA,玄学复杂度) 但是他的缺点就是不能处理带负权值的边,和代码量稍稍复杂. ...

  9. 图论 ---- dijkstra变种dp Codeforces Div2 703 E. Paired Payment

    题目链接 题目大意: 无向图,但是一次一定要走两步,权值为两个边边权和的平方.求1到其他每个点的最短距离. n∈[1,1e5],m∈[1,min(2e5,n(n−1)2)],wi∈[1,50]n\in ...

最新文章

  1. 论新时代软件测试人员的工作之道(一)之一个故事
  2. ubuntu桌面_Ubuntu桌面自动更换bing每日壁纸
  3. 对象引用未保存的瞬态实例-在刷新之前保存瞬态实例
  4. JS里在光标位置插入字符
  5. Linux环境搭建 | 手把手教你配置Linux虚拟机
  6. python模块-getpass模块
  7. IDS与IPS的区别(HIDS、NIDS)
  8. html特效代码是怎么实现的,html特效代码大全
  9. 新技能Get:如何利用HTTP技术提升网页的加载速度
  10. CSS Positioning页面
  11. 百度硬盘搜索使用指南
  12. 角色权限管理系统(角色功能授权)
  13. html文档在word打开是乱码怎么解决,word打开是乱码怎么办?怎么解决
  14. 服务器正文15:Assert的使用技巧
  15. C51单片机的电子时钟(数码管显示)
  16. 计算机系统的cpu是指什么意思,电脑cpu参数是什么意思
  17. 中国海洋捕捞市场投资前景分析及“十四五”规划建议报告2022年版
  18. Rust websocket 客户端实现
  19. Netconf配置及其RPC和Notification下发流程解析
  20. Java中的大端和小端

热门文章

  1. TLS certificate verification has been disabled
  2. 【CSP】第20届CCF CSP计算机软件能力认证划水贴
  3. matlab怎么相加相同id的几行,matlab几个有用的技巧
  4. java聊天室源工程文件_socket实现java聊天室,公告等功能,前后端分离(附源码)...
  5. python数据分析第二讲_七月在线 Python数据分析 第二课 Numpy
  6. JavaScript数据类型之赋值运算符(10)
  7. vuex 源码分析_Vuex源码解析(一):Module初始化
  8. XSS后台敏感操作(审计思路实现)
  9. Wannafly挑战赛9: B. 数一数
  10. bzoj 4952: [Wf2017]Need for Speed(二分)