主要是记得传比较算子进去,优先队列要的那个算子参数大概是用来定义优先级的,默认是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. 2017年7个主要的金融行业数据趋势
  2. 剑指Offer_Python实现
  3. Delphi控件之---UpDown以及其与TEdit的配合使用(比如限制TEdit只能输入数字,还有Object Inspector之组件属性的介绍)...
  4. ggplot2设置坐标轴范围_ggplot2画图时出现重合的点以及标签如何处理?有现成的包ggrepel
  5. Dapr牵手.NET学习笔记:Actor小试
  6. 【汇编优化】之X86架构优化公用头讲解
  7. python读excel并写入_Python 写入和读取Excel数据
  8. python解释型语言_python是解释型语言吗?会被编译吗?
  9. Python制作代码雨
  10. Windows 7下可以使用的虚拟光驱软件
  11. 四种常见演讲结构对比
  12. CAD.net 根据句柄获取图元
  13. java调色板代码_调色板的代码
  14. 2020CADCG专题报告笔记 Jittor计图 深度学习框架
  15. mysql 定位截取字符串_mysql 字符串定位、字符串截取
  16. Vista SP1 vs. XP SP2 - Benchmarked
  17. 关于智慧团建忘记密码的解决方法
  18. 从新手到熟练,怎么学好Zbrush?
  19. KStar ----BPM应用框架,K2 的新星
  20. 网阔MZ200A设备常见问题定位与解决

热门文章

  1. java implements this,Java – 何时使用“this”关键字
  2. ERROR: Failed to Setup IP tables: Unable to enable SKIP DNAT rule
  3. java.sql.SQLException: null,message server: Host ora-rac2 is blocked because of many
  4. layUI数据表格(table)
  5. 如何让html标签不转义
  6. 使用vs2019和pyinstaller将py文件打包成一个exe文件(含图标),pyinstaller安装失败解决方案
  7. Life is short, you need Python. ——Bruce Eckel
  8. 【CCCC】L3-005 垃圾箱分布 (30分),Dijkstra跑n遍 = 多源最短路,emm
  9. 收到计算机系统公司退款会计分录,​收到客人的退款的会计分录怎么写
  10. wifi扫描流程图_扫描方法与流程