题目链接:https://daniu.luogu.org/problem/show?pid=2901

Astar的方程$f(n)=g(n)+h(n)$,在这道题中我们可以反向最短路处理出$h(n)$的精确值。然后跑Astar找K次最短路就好了。

 #include<cstdio>
#include<cstring>
#include<algorithm>
#include<queue>
using namespace std;
int inline readint(){
int Num;char ch;
while((ch=getchar())<''||ch>'');Num=ch-'';
while((ch=getchar())>=''&&ch<='') Num=Num*+ch-'';
return Num;
}
int N,M,K;
int to[],ne[],w[],fir[],cnt=;
void add(int a,int b,int c){
to[++cnt]=b;
w[cnt]=c;
ne[cnt]=fir[a];
fir[a]=cnt;
}
int nto[],nne[],nw[],nfir[],ncnt=;
void nadd(int a,int b,int c){
nto[++ncnt]=b;
nw[ncnt]=c;
nne[ncnt]=nfir[a];
nfir[a]=ncnt;
}
int dis[];
bool in[];
queue <int> q;
void Spfa(){
memset(dis,/,sizeof(dis));
in[]=true;
dis[]=;
q.push();
int u;
while(!q.empty()){
int u=q.front();
q.pop();
in[u]=false;
for(int i=nfir[u];i!=-;i=nne[i]){
int v=nto[i];
if(dis[v]>dis[u]+nw[i]){
dis[v]=dis[u]+nw[i];
if(!in[v]){
in[v]=true;
q.push(v);
}
}
}
}
}
struct NODE{
int d,num;
NODE(int _d=,int _num=){
d=_d;
num=_num;
}
bool operator < (const NODE &_)const{
return d>_.d;
}
};
int ans[],rk=;
priority_queue <NODE> Q;
void Astar(){
Q.push(NODE(dis[N],N));
NODE u;
while(!Q.empty()){
u=Q.top();
Q.pop();
if(u.num==){
ans[++rk]=u.d;
if(rk==K) return;
}
for(int i=fir[u.num];i!=-;i=ne[i])
Q.push(NODE(u.d-dis[u.num]+w[i]+dis[to[i]],to[i]));
}
}
int main(){
memset(fir,-,sizeof(fir));
memset(nfir,-,sizeof(nfir));
N=readint();
M=readint();
K=readint();
for(int i=;i<=M;i++){
int a=readint(),
b=readint(),
c=readint();
add(a,b,c);
nadd(b,a,c);
}
Spfa();
Astar();
for(int i=;i<=K;i++)
if(ans[i]) printf("%d\n",ans[i]);
else puts("-1");
return ;
}

最新文章

  1. mysql基本操作
  2. MySQL源码分析:源码文件结构及主要数据结构
  3. 数位DP之奥义
  4. padding(内边距)、margin(外边距)、border(边框)
  5. Runloop之个人理解
  6. WinForm动态添加控件及其事件(转)
  7. scrapy爬虫成长日记之将抓取内容写入mysql数据库
  8. 用CSS变形创建圆形导航
  9. [转]NHibernate之旅(7):初探NHibernate中的并发控制
  10. JSP-标准动作标记
  11. apache如何在虚拟主机中实现用户验证
  12. Codeforces 474A Keyboard (水
  13. 关于《Unity3D/2D游戏开发从0到1》书籍再版说明
  14. AbstractQueuedSynchronizer源码解读--续篇之Condition
  15. cordova原生页面切换效果插件的使用:com.telerik.plugins.nativepagetransitions
  16. java正则表达式的忽略大小写
  17. redis 主从配置和集群配置
  18. 使用 IntraWeb (7) - 主模板
  19. Java经典问题:传值与传引用?
  20. Servlet对文件的读写操作

热门文章

  1. iOS 开发小常识 开发笔记
  2. 自己写的Android端HttpUtil工具类
  3. Vue框架之组件系统
  4. [m() for i in range(8)]
  5. 疯狂JAVA——数组
  6. linux系统无法上外网,路由器可以上网,可以ping通路由器,ping不通外网IP
  7. Mac 中安装 Apache Ant
  8. C# ref和out总结
  9. C++ 多线程与并发
  10. bzoj 1504 郁闷的出纳员