[模板] k短路
简介
Dijkstra最短路+A*搜索.
先逆向求所有点到终点的最短路 \(dis[i]\).
定义估价函数 \(f[i] = d[i] + dis[i]\) , 其中 \(d[i]\) 表示当前起点到 \(i\) 点的路径长度, 则 \(f[i]\) 表示一条从 \(u\) 到 \(v\) 经过 \(i\) 点的路径长度.
与Dijkstra算法类似, 将 \(f[i]\) 放到堆中, 每次求出 \(f[i]\) 最小的节点 \(u\) , 维护相邻节点 \(v\) :
\]
则
当第 $k$ 次 $u$ 为终点, $f[u]$ 即为起点到终点的第 $k$ 短路.
### 代码
```
//the nth point is departure, 1st is destination
const int nsz=1050,msz=10050;
const ll ninf=1e16;
int n,m,k;
struct te{int t,pr,v;}edge[msz*2];
int hd[nsz],pe=1;
void adde(int f,int t,int v){edge[++pe]=(te){t,hd[f],v};hd[f]=pe;}
void addsg(int f,int t,int v){adde(f,t,v);adde(t,f,-1);}
ll dis[nsz],vi[nsz];
struct tnd{ll p,d;};
bool operator<(tnd l,tnd r){return l.d>r.d;}
priority_queue<tnd> pq;
void dij(int f){
rep(i,1,n)dis[i]=ninf;
dis[f]=0;
pq.push((tnd){f,0});
while(!pq.empty()){
int u=pq.top().p;pq.pop();
if(vi[u])continue;
for(int i=hd[u],v=edge[i].t;i;i=edge[i].pr,v=edge[i].t){
if(edge[i].v!=-1)continue;//inv edge
if(dis[v]>dis[u]+edge[i^1].v)dis[v]=dis[u]+edge[i^1].v,pq.push((tnd){v,dis[v]});
}
}
// rep(i,1,n)cout<<dis[i]<<'\n';
}
ll ans[nsz],pa=0;
void astar(){
if(dis[n]>=ninf)return;
pq.push((tnd){n,dis[n]});
while(!pq.empty()){
ll u=pq.top().p,d=pq.top().d;pq.pop();
if(u==1){
ans[++pa]=d;
if(pa==k)break;
continue;
}
for(int i=hd[u],v=edge[i].t;i;i=edge[i].pr,v=edge[i].t){
if(edge[i].v==-1)continue;
pq.push((tnd){v,d-dis[u]+dis[v]+edge[i].v});
}
}
}
//use
dij(1);
while(!pq.empty())pq.pop();
astar();
```\]
[模板] k短路的更多相关文章
- 洛谷 [P2483] [模板] k短路
人生中的第一道黑题... 其实就是k短路模板 #include <iostream> #include <cstdio> #include <cstring> #i ...
- P2483 【模板】k短路([SDOI2010]魔法猪学院)
题目背景 感谢@kczno1 @X_o_r 提供hack数据 题目描述 iPig在假期来到了传说中的魔法猪学院,开始为期两个月的魔法猪训练.经过了一周理论知识和一周基本魔法的学习之后,iPig对猪世界 ...
- POJ 2449Remmarguts' Date K短路模板 SPFA+A*
K短路模板,A*+SPFA求K短路.A*中h的求法为在反图中做SPFA,求出到T点的最短路,极为估价函数h(这里不再是估价,而是准确值),然后跑A*,从S点开始(此时为最短路),然后把与S点能达到的点 ...
- k短路模板 POJ2449
采用A*算法的k短路模板 #include <iostream> #include <cstdio> #include <cstring> #include < ...
- 沈阳网络赛D-Made In Heaven【k短路】【模板】
One day in the jail, F·F invites Jolyne Kujo (JOJO in brief) to play tennis with her. However, Pucci ...
- UESTC - 1987 童心未泯的帆宝和乐爷 (第k短路 A*算法+SPFA算法 模板)
传送门: http://www.qscoj.cn/#/problem/show/1987 童心未泯的帆宝和乐爷 Edit Time Limit: 10000 MS Memory Limit: ...
- ACM-ICPC 2018 沈阳赛区网络预赛 D. Made In Heaven(第k短路模板)
求第k短路模板 先逆向求每个点到终点的距离,再用dij算法,不会超时(虽然还没搞明白为啥... #include<iostream> #include<cstdio> #inc ...
- [poj2449]Remmarguts' Date(K短路模板题,A*算法)
解题关键:k短路模板题,A*算法解决. #include<cstdio> #include<cstring> #include<algorithm> #includ ...
- poj2449(k短路&A_star模板)
题目链接:http://poj.org/problem?id=2449 题意:给出一个有向图,求s到t的第k短路: 思路:k短路模板题,可以用A_star模板过: 单源点最短路径+高级搜索A*;A*算 ...
随机推荐
- 详解Linux高效命令head、tail和cat
Linux中提供了多种命令和程序用于浏览文件.无论对于新手.普通用户.高级用户.开发人员还是管理员来说,与诸多文件打交道都是一项艰巨的任务.而如何做到高效更称得上是一门艺术. 今天就让我们来探讨几个最 ...
- 事件绑定on与hover事件
今天项目中UI设计了一个鼠标划入和划出的效果,本来这个小效果是非常简单的!可是在实际的生产环境中就出现了一点点问题!因为在实际的环境中,数据全部是用ajax异步加载进去的,这样就造成了hover方法不 ...
- oracle nvl,nvl2,coalesce几个函数的区别
1.nvl(exp1,exp2)该函数是处理表达式中的空值: 假设表达式exp1是空值,则该函数返回表达式exp2的值, 假设表达式exp1没有是空值,则该函数返回表达式exp1的值. 2.nvl2( ...
- idea使用事项
1.调用外部jar包 Run/Debug Configurations --- Tomcat Server --- Startup/connection --- Debug 添加“path”变量:** ...
- 【Dojo 1.x】笔记5 使用本地引用
习惯用CDN引用的同学肯定会知道还有一种叫本地引用,这篇笔记测试本地引用. Dojo SDK下载地址:点我 下载中间的Release Package即可,如果希望下载完整包(Full Source), ...
- ASP.NET Core 一步步搭建个人网站(1)_环境搭建
ASP.NET Core2.0发布有一阵子了,这是.NET 开源跨平台的一个重大里程碑, 也意味着比1.0版本要更加成熟.目前.net core具有开源.跨平台.灵活部署.模块化架构等等特性,吸引着一 ...
- javaweb登陆过滤器实现
在web.xml中配置登陆过滤器: <!-- 配置登陆过滤器 --> <filter> <filter-name>loginFilter</filter-na ...
- Python开发爬虫之BeautifulSoup解析网页篇:爬取安居客网站上北京二手房数据
目标:爬取安居客网站上前10页北京二手房的数据,包括二手房源的名称.价格.几室几厅.大小.建造年份.联系人.地址.标签等. 网址为:https://beijing.anjuke.com/sale/ B ...
- 当我们按下电源键,Android 究竟做了些什么?
欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 本文由goo发表于云+社区专栏 相信我们对Android系统都不陌生,而Android系统博大精深,被各种各样的智能设备承载的同时,我们会否 ...
- 解决TOC与目录导航冲突问题
TOC是指markdown的TOC; 目录导航是指博客园中各个博主提供的各种目录导航. 现在改换markdown写博文了,我喜欢使用TOC作为目录,让大家了解博文的内容,也喜欢用"目录导航& ...