题目链接: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 ;
}

[Luogu2901][USACO08MAR]牛慢跑Cow Jogging Astar K短路的更多相关文章

  1. 洛谷P2901 [USACO08MAR]牛慢跑Cow Jogging

    题目描述 Bessie has taken heed of the evils of sloth and has decided to get fit by jogging from the barn ...

  2. 洛谷 P3111 [USACO14DEC]牛慢跑Cow Jog_Sliver

    P3111 [USACO14DEC]牛慢跑Cow Jog_Sliver 题目描述 The cows are out exercising their hooves again! There are N ...

  3. 【USACO Mar08】 奶牛跑步 A-star k短路

    Description Bessie准备用从牛棚跑到池塘的方法来锻炼. 但是因为她懒,她只准备沿着下坡的路跑到池塘,然后走回牛棚. Bessie也不想跑得太远,所以她想走最短的路经. 农场上一共有M( ...

  4. luogu3111 [USACO14DEC]牛慢跑Cow Jog_Sliver

    题目大意 有N (1 <= N <= 100,000)头奶牛在一个单人的超长跑道上慢跑,每头牛的起点位置都不同.由于是单人跑道,所有他们之间不能相互超越.当一头速度快的奶牛追上另外一头奶牛 ...

  5. luogu P3111 [USACO14DEC]牛慢跑Cow Jog_Sliver |贪心+模拟

    有N (1 <= N <= 100,000)头奶牛在一个单人的超长跑道上慢跑,每头牛的起点位置都不同.由于是单人跑道,所有他们之间不能相互超越.当一头速度快的奶牛追上另外一头奶牛的时候,他 ...

  6. 洛谷P3111 [USACO14DEC]牛慢跑Cow Jog_Sliver

    传送门 题目大意:n头牛在单行道n个位置,开始用不同的速度跑步. 当后面的牛追上前面的牛,后面的牛会和前面的牛以一样的速度 跑,称为一个小团体.问:ts后有多少个小团体. 题解:模拟 倒着扫一遍,因为 ...

  7. 洛谷 3111 [USACO14DEC]牛慢跑Cow Jog_Sliver 题解

    本蒟蒻又来发题解了, 一道较水的模拟题. 题意不过多解释, 思路如下: 在最开始的时候求出每头牛在t秒的位置(最终位置 然后,如果后一头牛追上了前一头牛,那就无视它, 把它们看成一个整体. else ...

  8. LUOGU P3111 [USACO14DEC]牛慢跑Cow Jog_Sliver

    传送门 解题思路 比较简单的一道思路题,首先假设他们没有前面牛的限制,算出每只牛最远能跑多远.然后按照初位置从大到小扫一遍,如果末位置大于等于前面的牛,那么就说明这两头牛连一块了. 代码 #inclu ...

  9. 洛谷P3111 [USACO14DEC]牛慢跑Cow Jog_Sliver 性质分析

    Code: #include<cstdio> #include<algorithm> #include<cstring> using namespace std; ...

随机推荐

  1. java移位运算符实验程序:&lt;&lt;(左移)、&gt;&gt;(带符 号右移)和&gt;&gt;&gt;(无符号右移)

    public class txs { static void leftbit(){ int i;               //整型长度为32位                           ...

  2. pip 安装速度慢解决办法

    https://blog.csdn.net/liujingclan/article/details/50176597 https://blog.csdn.net/rytyy/article/detai ...

  3. 2016/3/18 ①PHP基础 ② PHP函数 ③其他函数(随机数、关于日期) ④正则表达式 ⑤字符串处理

    一.PHP基础 1,标记和注释 ①<?php?> ②单行注释// 多行注释/**    */2, 输出语句 ①echo输出 echo可以输出多个字符串,用逗号隔开. ②print输出 pr ...

  4. shell网络管理

    背景知识 联网就是通过网络将主机进行互联并采用不同的规范配置网络上的节点.我们以 TCP/IP 作为网络栈,所有的操作都是基于它进行的.网络是计算机系统中重要的部分.连接在网络上的每个节点都分配了一个 ...

  5. YTU 2959: 代码填充--雨昕学矩阵

    2959: 代码填充--雨昕学矩阵 时间限制: 1 Sec  内存限制: 128 MB 提交: 112  解决: 50 题目描述 雨昕开始学矩阵了.矩阵数乘规则:一个数k乘一个矩阵A还是一个矩阵,行数 ...

  6. JFreeChart生成饼形图(3) (转自 JSP开发技术大全)

    JFreeChart生成饼形图(3) (转自 JSP开发技术大全) 14.3 利用JFreeChart生成饼形图 通过JFreeChart插件,即可以生成普通效果的饼形图,也可以生成3D效果的饼形图: ...

  7. idea output 悬浮浮动问题

    参考:https://www.cnblogs.com/thinkingandworkinghard/p/6306800.html 点这个就ok

  8. Codeforces 633H. Fibonacci-ish II

    题目大意: 一个数列 q次询问 每次询问l r 将数列中l-r的位置排序去重后的数列成为b 输出 sigma b i * F i (其中F i为斐波那契数列中的第i项) 思路: 由于要去重 考虑权值线 ...

  9. [Usaco2013 DEC] Vacation Planning

    [题目链接] https://www.lydsy.com/JudgeOnline/problem.php?id=4093 [算法] 对于k个枢纽 , 分别在正向图和反向图上跑dijkstra最短路 , ...

  10. window下 node.js 的安装

    下载安装文件 Node.js安装包及源码下载地址为:https://nodejs.org/en/download/. 32 位安装包下载地址 : https://nodejs.org/dist/v4. ...