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】相关推荐

  1. A*算法+最短路实现K短路+模板题

    <font color=black size=4>K短路问题还是很普遍的,了解一下K短路很有必要,顺便学会A*的简单应用更好. A*算法,是一种启发式搜索算法,我们可以自己设定一个估价函数 ...

  2. poj2449 K短路模板题

    昨晚看WC论文发现自己连K短路的经典A*算法还不会,补了一波,模板题输出-1后没return继续跑wa了一早上...... 算法流程: ①在反向图中求出t到每个点的最短路 ②从原点bfs,估价f=d+ ...

  3. POJ 2449 Remmarguts' Date(k短路模板)

    link:https://vjudge.net/problem/POJ-2449 前面输入与大多最短路题相同 最后一行输入s,t,k 求从s到t的第K短路 wiki link: https://en. ...

  4. A*算法的认识与求第K短路模板

    现在来了解A*算法是什么 现在来解决A*求K短路问题 在一个有权图中,从起点到终点最短的路径成为最短路,第2短的路成为次短路,第3短的路成为第3短路,依此类推,第k短的路成为第k短路.那么,第k短路怎 ...

  5. 【01背包求方案数模板】洛谷 P1164 小A点菜

    洛谷 P1164 小A点菜 https://www.luogu.org/problemnew/show/P1164 题目背景 uim神犇拿到了uoi的ra(镭牌)后,立刻拉着基友小A到了一家--餐馆, ...

  6. 巧用TreeSet求解第k小整数(洛谷P1138题题解,Java语言描述)

    题目要求 P1138题目链接 分析 第K小整数应该是比较经典的问题啦,但我们也可以利用现成的数据结构去完成轻松处理. 既然还要去重,那不妨--嘿嘿嘿--TreeSet万岁!! 把元素全打进去就完成了去 ...

  7. AC自动机模板(【洛谷3808】)

    题面 题目背景 这是一道简单的AC自动机模版题. 用于检测正确性以及算法常数. 为了防止卡OJ,在保证正确的基础上只有两组数据,请不要恶意提交. 题目描述 给定n个模式串和1个文本串,求有多少个模式串 ...

  8. ST表 (模板) 洛谷3865

    题目背景 这是一道ST表经典题--静态区间最大值 请注意最大数据时限只有0.8s,数据强度不低,请务必保证你的每次查询复杂度为 O(1) O(1) 题目描述 给定一个长度为 N N 的数列,和 M M ...

  9. P3371 单源最短路径【模板】 洛谷

    https://www.luogu.org/problem/show?pid=3371 题目描述 如题,给出一个有向图,请输出从某一点出发到所有点的最短路径长度. 输入输出格式 输入格式: 第一行包含 ...

最新文章

  1. 《自然》《科学》预告2022科学大事件:重启引力波探测器,发布百亿亿级超算,还要多去月球串串门...
  2. 【Paper】2015_El H_Decentralized Control Architecture for UAV-UGV Cooperation
  3. java基础之构造方法
  4. Linux中vim编辑器的缩进的功能键
  5. Python max 函数 - Python零基础入门教程
  6. oracle面向对象的数据类型,Oracle面向对象编程OOP
  7. 谷歌相册明年取消无限空间储存政策
  8. JDK 动态代理与 CGLIB 动态代理,它俩真的不一样
  9. 判断本地和云端通讯录是否一致
  10. django-pure-pagination
  11. 英特尔 AI 芯片业务的现状与未来
  12. OpenCV-Python实战(20)——OpenCV计算机视觉项目在Web端的部署
  13. Nginx做反向代理的问题
  14. FastNetMon 使用笔记
  15. MySQL查询point类型类型的坐标,返回经度纬度
  16. 网线水晶头两种标准的接法
  17. 使用周期一致的对抗网络进行不成对的图像到图像转换
  18. CE 无法搜索中文字符串变量的解决办法
  19. faceapp一直显示选择服务器,faceapp提示choosing a serve_faceapp提示choosing a serve解决办法_玩游戏网...
  20. 几款好用的Tooltips 提示框插件

热门文章

  1. python重复执行函数_Python threading 单线程 timer重复调用函数
  2. hsf 架构_HSF 服务
  3. 计算机专业有没有化学课,本科化学申请计算机名校都成功了,那还有什么是不可能的呢?...
  4. mysql 包含非数字_mysql 正则表达式查询含有非数字和字符的记录
  5. 计算机教资笔试答题,教资笔试5大题型的解答技巧,你get到了嘛?
  6. 【 MATLAB 】信号处理工具箱的信号产生函数之 sawtooth 函数简记
  7. iOS开发UIlabel篇:iOS 10 3 Label设置的中划线突然失效了
  8. 初创公司MongoDB最佳实践策略和躲坑秘笈
  9. 使用帮助   history 用法   echo输出闪烁作业
  10. 配置openStack使用spice