使用priority_queue实现Dijkstra
主要是记得传比较算子进去,优先队列要的那个算子参数大概是用来定义优先级的,默认是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相关推荐
- 一句话题解(20170801~20170125)
8.1 bzoj 4720 noip2016 换教室 floyd预处理+期望(薛定谔的猫) bzoj 4318 OSU! 三次函数期望值 从一次.二次推得 8.2 bzoj 1076 状压+期望DP ...
- 几道pb_ds模板题
冬令营上有人讲了这个,看上去很省事的样子,所以来学习一个 1:COGS 2.旅行计划 题目地址: http://cogs.pro/cogs/problem/problem.php?pid=2 求起点到 ...
- 图论01.最短路专题_学习笔记+模板
图论01.最短路专题_学习笔记+模板 一.定义与性质 ● 需要的前导知识点 路径 最短路 有向图中的最短路.无向图中的最短路 单源最短路.每对结点之间的最短路 ● 最短路的性质 对于边权为正的图,任意 ...
- 【HDU/算法】最短路问题 杭电OJ 2544 (Dijkstra,Dijkstra+priority_queue,Floyd,Bellman_ford,SPFA)
最短路径问题是图论中很重要的问题. 解决最短路径几个经典的算法 1.Dijkstra算法 单源最短路径(贪心),还有用 priority_queue 进行优化的 Dijkstra 算法. 2.bell ...
- dijkstra+priority_queue+vector
最短路 时间限制: 3 Sec 内存限制: 128 MB 题目描述 给定M条边,N个点的带权无向图 求1到N的最短路 N<=100000 M<=500000 输入 第一行:N,M ...
- Codeforces.1051F.The Shortest Statement(最短路Dijkstra)
题目链接 先随便建一棵树. 如果两个点(u,v)不经过非树边,它们的dis可以直接算. 如果两个点经过非树边呢?即它们一定要经过该边的两个端点,可以直接用这两个点到 u,v 的最短路更新答案. 所以枚 ...
- 使用最小堆优化Dijkstra算法
OJ5.2很简单,使用priority_queue实现了最小堆竟然都过了OJ--每次遇到relax的问题时都简单粗暴地重新push进一个节点-- 然而正确的实现应该是下面这样的吧,关键在于swap堆中 ...
- 图论-最短路Dijkstra算法详解超详 有图解
整体来看dij就是从起点开始扩散致整个图的过程,为什么说他稳定呢,是因为他每次迭代,都能得到至少一个结点的最短路.(不像SPFA,玄学复杂度) 但是他的缺点就是不能处理带负权值的边,和代码量稍稍复杂. ...
- 图论 ---- 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 ...
最新文章
- 2017年7个主要的金融行业数据趋势
- 剑指Offer_Python实现
- Delphi控件之---UpDown以及其与TEdit的配合使用(比如限制TEdit只能输入数字,还有Object Inspector之组件属性的介绍)...
- ggplot2设置坐标轴范围_ggplot2画图时出现重合的点以及标签如何处理?有现成的包ggrepel
- Dapr牵手.NET学习笔记:Actor小试
- 【汇编优化】之X86架构优化公用头讲解
- python读excel并写入_Python 写入和读取Excel数据
- python解释型语言_python是解释型语言吗?会被编译吗?
- Python制作代码雨
- Windows 7下可以使用的虚拟光驱软件
- 四种常见演讲结构对比
- CAD.net 根据句柄获取图元
- java调色板代码_调色板的代码
- 2020CADCG专题报告笔记 Jittor计图 深度学习框架
- mysql 定位截取字符串_mysql 字符串定位、字符串截取
- Vista SP1 vs. XP SP2 - Benchmarked
- 关于智慧团建忘记密码的解决方法
- 从新手到熟练,怎么学好Zbrush?
- KStar ----BPM应用框架,K2 的新星
- 网阔MZ200A设备常见问题定位与解决
热门文章
- java implements this,Java – 何时使用“this”关键字
- ERROR: Failed to Setup IP tables: Unable to enable SKIP DNAT rule
- java.sql.SQLException: null,message server: Host ora-rac2 is blocked because of many
- layUI数据表格(table)
- 如何让html标签不转义
- 使用vs2019和pyinstaller将py文件打包成一个exe文件(含图标),pyinstaller安装失败解决方案
- Life is short, you need Python. ——Bruce Eckel
- 【CCCC】L3-005 垃圾箱分布 (30分),Dijkstra跑n遍 = 多源最短路,emm
- 收到计算机系统公司退款会计分录,​收到客人的退款的会计分录怎么写
- wifi扫描流程图_扫描方法与流程