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