第K短路模板【POJ2449 / 洛谷2483 / BZOJ1975 / HDU6181】
1.到底如何求k短路的?
我们考虑,要求k短路,要先求出最短路/次短路/第三短路……/第(k-1)短路,然后访问到第k短路。
接下来的方法就是如此操作的。
2.f(x)的意义?
我们得到的f(x)更小,优先访问这个f(x)的点。
我们可以定义一组数{p,g,h},p是某一个点,g是估价,h是实际,那么g+h更小的点p会优先访问。
为什么呢?因为假设我们求出了w短路,接下来要求(w+1)短路,就要求最小的另一条路径。
应该易理解。
3.为什么选择最短路来估价?
很简单的选择,我们既然要求最短了,当然是找最短路。
事实上这不是我们的初衷,但是有了“先求(k-1)短路”的概念后,这么理解也可以了。
4.实现
实现是比较简单的。
如何预处理出g(x)呢?显然,将所有边反向,然后求end到所有点的单源最短路径就好了。
接下来的启发式搜索可以简单解决。
事实上,就是在暴力搜索的基础上增加了启发式搜索:往一个最优的点的地方走。
另外还是要专来一篇这题blog的QAQ
关于上题目的程序:
86ms
#include<iostream> #include <stdio.h> #include <string.h> #include <algorithm> #include <queue> using namespace std; const int N=100000+10; const int inf=0x3f3f3f3f; struct edge {int u,v,w,next; }e[N<<1]; int head[N<<1],head1[N<<1],dis[N<<1],vis[N<<1],cnt[N<<1]; int num; int n,m; int s,t,k; struct node {int g,h;int to;bool operator<(node a)const{return a.h+a.g<h+g;} }; void init() {num=0;memset(head1,-1,sizeof(head1));memset(head,-1,sizeof(head)); } void addegde(int u,int v,int w) {e[num].v=v;e[num].w=w;e[num].next=head[u];head[u]=num++;e[num].v=u;e[num].w=w;e[num].next=head1[v];head1[v]=num++; } void spfa() {memset(vis,0,sizeof(vis));memset(dis,inf,sizeof(dis));dis[t]=0;vis[t]=1;queue<int>q;q.push(t);while(!q.empty()){int u=q.front();q.pop();vis[u]=0;for(int i=head1[u];i!=-1;i=e[i].next){int v=e[i].v;if(dis[v]>dis[u]+e[i].w){dis[v]=dis[u]+e[i].w;if(!vis[v]){q.push(v);vis[v]=1;}}}} } int AA() {memset(cnt,0,sizeof(cnt));priority_queue<node>Q;node p,q;p.g=0;p.to=s;p.h=dis[s];Q.push(p);while(!Q.empty()){q=Q.top();Q.pop();cnt[q.to]++;if(cnt[q.to]>k)continue;if(cnt[t]==k)return q.g;for(int i=head[q.to];i!=-1;i=e[i].next){int v=e[i].v;p.to=v;p.g=q.g+e[i].w;p.h=dis[v];Q.push(p);}}return -1; } int main() {while(~scanf("%d%d%d",&n,&m,&k)){scanf("%d%d",&s,&t);init();for(int i=0;i<m;i++){int u,v,w;scanf("%d%d%d",&u,&v,&w);addegde(u,v,w);}spfa();if(s==t)k++;//cout<<dis[s]<<endl;int ans=AA();printf("%d\n",ans);}return 0; }
SPFA+A*
转载于:https://www.cnblogs.com/Roni-i/p/9441194.html
第K短路模板【POJ2449 / 洛谷2483 / BZOJ1975 / HDU6181】相关推荐
- A*算法+最短路实现K短路+模板题
<font color=black size=4>K短路问题还是很普遍的,了解一下K短路很有必要,顺便学会A*的简单应用更好. A*算法,是一种启发式搜索算法,我们可以自己设定一个估价函数 ...
- poj2449 K短路模板题
昨晚看WC论文发现自己连K短路的经典A*算法还不会,补了一波,模板题输出-1后没return继续跑wa了一早上...... 算法流程: ①在反向图中求出t到每个点的最短路 ②从原点bfs,估价f=d+ ...
- POJ 2449 Remmarguts' Date(k短路模板)
link:https://vjudge.net/problem/POJ-2449 前面输入与大多最短路题相同 最后一行输入s,t,k 求从s到t的第K短路 wiki link: https://en. ...
- A*算法的认识与求第K短路模板
现在来了解A*算法是什么 现在来解决A*求K短路问题 在一个有权图中,从起点到终点最短的路径成为最短路,第2短的路成为次短路,第3短的路成为第3短路,依此类推,第k短的路成为第k短路.那么,第k短路怎 ...
- 【01背包求方案数模板】洛谷 P1164 小A点菜
洛谷 P1164 小A点菜 https://www.luogu.org/problemnew/show/P1164 题目背景 uim神犇拿到了uoi的ra(镭牌)后,立刻拉着基友小A到了一家--餐馆, ...
- 巧用TreeSet求解第k小整数(洛谷P1138题题解,Java语言描述)
题目要求 P1138题目链接 分析 第K小整数应该是比较经典的问题啦,但我们也可以利用现成的数据结构去完成轻松处理. 既然还要去重,那不妨--嘿嘿嘿--TreeSet万岁!! 把元素全打进去就完成了去 ...
- AC自动机模板(【洛谷3808】)
题面 题目背景 这是一道简单的AC自动机模版题. 用于检测正确性以及算法常数. 为了防止卡OJ,在保证正确的基础上只有两组数据,请不要恶意提交. 题目描述 给定n个模式串和1个文本串,求有多少个模式串 ...
- ST表 (模板) 洛谷3865
题目背景 这是一道ST表经典题--静态区间最大值 请注意最大数据时限只有0.8s,数据强度不低,请务必保证你的每次查询复杂度为 O(1) O(1) 题目描述 给定一个长度为 N N 的数列,和 M M ...
- P3371 单源最短路径【模板】 洛谷
https://www.luogu.org/problem/show?pid=3371 题目描述 如题,给出一个有向图,请输出从某一点出发到所有点的最短路径长度. 输入输出格式 输入格式: 第一行包含 ...
最新文章
- 《自然》《科学》预告2022科学大事件:重启引力波探测器,发布百亿亿级超算,还要多去月球串串门...
- 【Paper】2015_El H_Decentralized Control Architecture for UAV-UGV Cooperation
- java基础之构造方法
- Linux中vim编辑器的缩进的功能键
- Python max 函数 - Python零基础入门教程
- oracle面向对象的数据类型,Oracle面向对象编程OOP
- 谷歌相册明年取消无限空间储存政策
- JDK 动态代理与 CGLIB 动态代理,它俩真的不一样
- 判断本地和云端通讯录是否一致
- django-pure-pagination
- 英特尔 AI 芯片业务的现状与未来
- OpenCV-Python实战(20)——OpenCV计算机视觉项目在Web端的部署
- Nginx做反向代理的问题
- FastNetMon 使用笔记
- MySQL查询point类型类型的坐标,返回经度纬度
- 网线水晶头两种标准的接法
- 使用周期一致的对抗网络进行不成对的图像到图像转换
- CE 无法搜索中文字符串变量的解决办法
- faceapp一直显示选择服务器,faceapp提示choosing a serve_faceapp提示choosing a serve解决办法_玩游戏网...
- 几款好用的Tooltips 提示框插件
热门文章
- python重复执行函数_Python threading 单线程 timer重复调用函数
- hsf 架构_HSF 服务
- 计算机专业有没有化学课,本科化学申请计算机名校都成功了,那还有什么是不可能的呢?...
- mysql 包含非数字_mysql 正则表达式查询含有非数字和字符的记录
- 计算机教资笔试答题,教资笔试5大题型的解答技巧,你get到了嘛?
- 【 MATLAB 】信号处理工具箱的信号产生函数之 sawtooth 函数简记
- iOS开发UIlabel篇:iOS 10 3 Label设置的中划线突然失效了
- 初创公司MongoDB最佳实践策略和躲坑秘笈
- 使用帮助 history 用法 echo输出闪烁作业
- 配置openStack使用spice