使用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 ...
最新文章
- 论新时代软件测试人员的工作之道(一)之一个故事
- ubuntu桌面_Ubuntu桌面自动更换bing每日壁纸
- 对象引用未保存的瞬态实例-在刷新之前保存瞬态实例
- JS里在光标位置插入字符
- Linux环境搭建 | 手把手教你配置Linux虚拟机
- python模块-getpass模块
- IDS与IPS的区别(HIDS、NIDS)
- html特效代码是怎么实现的,html特效代码大全
- 新技能Get:如何利用HTTP技术提升网页的加载速度
- CSS Positioning页面
- 百度硬盘搜索使用指南
- 角色权限管理系统(角色功能授权)
- html文档在word打开是乱码怎么解决,word打开是乱码怎么办?怎么解决
- 服务器正文15:Assert的使用技巧
- C51单片机的电子时钟(数码管显示)
- 计算机系统的cpu是指什么意思,电脑cpu参数是什么意思
- 中国海洋捕捞市场投资前景分析及“十四五”规划建议报告2022年版
- Rust websocket 客户端实现
- Netconf配置及其RPC和Notification下发流程解析
- Java中的大端和小端
热门文章
- TLS certificate verification has been disabled
- 【CSP】第20届CCF CSP计算机软件能力认证划水贴
- matlab怎么相加相同id的几行,matlab几个有用的技巧
- java聊天室源工程文件_socket实现java聊天室,公告等功能,前后端分离(附源码)...
- python数据分析第二讲_七月在线 Python数据分析 第二课 Numpy
- JavaScript数据类型之赋值运算符(10)
- vuex 源码分析_Vuex源码解析(一):Module初始化
- XSS后台敏感操作(审计思路实现)
- Wannafly挑战赛9: B. 数一数
- bzoj 4952: [Wf2017]Need for Speed(二分)