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

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

 1 #include<cstdio>
 2 #include<cstring>
 3 #include<algorithm>
 4 #include<queue>
 5 using namespace std;
 6 int inline readint(){
 7     int Num;char ch;
 8     while((ch=getchar())<'0'||ch>'9');Num=ch-'0';
 9     while((ch=getchar())>='0'&&ch<='9') Num=Num*10+ch-'0';
10     return Num;
11 }
12 int N,M,K;
13 int to[10010],ne[10010],w[10010],fir[1010],cnt=0;
14 void add(int a,int b,int c){
15     to[++cnt]=b;
16     w[cnt]=c;
17     ne[cnt]=fir[a];
18     fir[a]=cnt;
19 }
20 int nto[10010],nne[10010],nw[10010],nfir[1010],ncnt=0;
21 void nadd(int a,int b,int c){
22     nto[++ncnt]=b;
23     nw[ncnt]=c;
24     nne[ncnt]=nfir[a];
25     nfir[a]=ncnt;
26 }
27 int dis[1010];
28 bool in[1010];
29 queue <int> q;
30 void Spfa(){
31     memset(dis,127/3,sizeof(dis));
32     in[1]=true;
33     dis[1]=0;
34     q.push(1);
35     int u;
36     while(!q.empty()){
37         int u=q.front();
38         q.pop();
39         in[u]=false;
40         for(int i=nfir[u];i!=-1;i=nne[i]){
41             int v=nto[i];
42             if(dis[v]>dis[u]+nw[i]){
43                 dis[v]=dis[u]+nw[i];
44                 if(!in[v]){
45                     in[v]=true;
46                     q.push(v);
47                 }
48             }
49         }
50     }
51 }
52 struct NODE{
53     int d,num;
54     NODE(int _d=0,int _num=0){
55         d=_d;
56         num=_num;
57     }
58     bool operator < (const NODE &_)const{
59         return d>_.d;
60     }
61 };
62 int ans[110],rk=0;
63 priority_queue <NODE> Q;
64 void Astar(){
65     Q.push(NODE(dis[N],N));
66     NODE u;
67     while(!Q.empty()){
68         u=Q.top();
69         Q.pop();
70         if(u.num==1){
71             ans[++rk]=u.d;
72             if(rk==K) return;
73         }
74         for(int i=fir[u.num];i!=-1;i=ne[i])
75             Q.push(NODE(u.d-dis[u.num]+w[i]+dis[to[i]],to[i]));
76     }
77 }
78 int main(){
79     memset(fir,-1,sizeof(fir));
80     memset(nfir,-1,sizeof(nfir));
81     N=readint();
82     M=readint();
83     K=readint();
84     for(int i=1;i<=M;i++){
85         int a=readint(),
86             b=readint(),
87             c=readint();
88         add(a,b,c);
89         nadd(b,a,c);
90     }
91     Spfa();
92     Astar();
93     for(int i=1;i<=K;i++)
94         if(ans[i]) printf("%d\n",ans[i]);
95         else puts("-1");
96     return 0;
97 }

转载于:https://www.cnblogs.com/halfrot/p/7565296.html

[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 ...

  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. 洛谷 P3014 [USACO11FEB]牛线Cow Line

    P3014 [USACO11FEB]牛线Cow Line 题目背景 征求翻译.如果你能提供翻译或者题意简述,请直接发讨论,感谢你的贡献. 题目描述 The N (1 <= N <= 20) ...

  5. bzoj 1598: [Usaco2008 Mar]牛跑步 [k短路 A*] [学习笔记]

    1598: [Usaco2008 Mar]牛跑步 题意:k短路 ~~貌似A*的题目除了x数码就是k短路~~ \[ f(x) = g(x) + h(x) \] \(g(x)\)为到达当前状态实际代价,\ ...

  6. AcWing 179. 八数码 178. 第K短路 (A-star)

    A-star 算法 算法证明略 做题步骤: 如果搜索空间过大,考虑使用A*算法,正常做真实距离,思考估价函数,验证估价函数的正确性,队列换成优先队列,新加一维 真实+估计,终点出队即为答案 AcWin ...

  7. 第K短路(A*(astar)算法)

    给定一张N个点(编号1,2-N),M条边的有向图,求从起点S到终点T的第K短路的长度,路径允许重复经过点或边. 注意: 每条最短路中至少要包含一条边. 输入格式 第一行包含两个整数N和M. 接下来M行 ...

  8. HDU6181(K短路问题)

    不知道为什么这个一直爆内存! #include<iostream> #include<algorithm> #include<cmath> #include< ...

  9. poj2449(k短路算法)

    K 短路问题(A* 启发式广搜) 1.k 短路问题就是最短路问题的延申,要找出第 k 短的路径.用广搜进行路径查找,第一次找到的 就是最短路,第二次找到的是第 2 短 路⋯以此类推.所以我们只需要一直 ...

最新文章

  1. 创建 Pool VIP - 每天5分钟玩转 OpenStack(122)
  2. 智源社区 2021 AI 大调查开启!
  3. python能做什么项目好-python能做什么项目
  4. Java编程思想:擦除的神秘之处
  5. C++STL的string容器
  6. CodeForces - 1321E World of Darkraft: Battle for Azathoth(二维偏序+线段树)
  7. 【线上分享】边缘计算与云原生架构应用及实践解析
  8. 收藏列表放入MySQL还是redis_mysql导入redis
  9. 吴恩达机器学习 12.异常检测
  10. FFmpeg源代码简单分析:avcodec_close()
  11. android连接airprint打印机,AirPrint:iOS的打印机
  12. 极客大学架构师训练营 系统架构 大型网站技术架构 维基百科、淘宝、新浪微博案例分析 第8课 听课总结
  13. PAT 乙级 Java 合集
  14. php 拼音搜索,通过拼音模糊搜索汉字的功能实现
  15. RTT笔记-分析自动初始化机制
  16. 【原创】基于SSM的医院预约挂号系统(医院预约挂号系统毕设源代码)
  17. win7计算机不能设置双屏怎么回事,win7怎么设置双屏显示?Win7双屏显示设置的方法...
  18. 数据分析 学习小结记录
  19. CVPR2022知识蒸馏用于目标检测:Focal and Global Knowledge Distillation for Detectors
  20. 2022春招第一波投递时间预测,早看早知道

热门文章

  1. java开发视频教学,阿里创新发布《新高并发宝典》
  2. 用python打印三角形图形创意图片_图形创意_尔雅_网课答案2020
  3. TypeError: __init__() missing 1 required positional argument: 'on_delete' 解决办法
  4. 湖北武汉三维扫描服务模具检测3D抄数设计数字化解决方案
  5. cornerstone怎样批量添加目录或有多级子目录的目录
  6. OpenGL学习笔记(5)3D基本概念
  7. list与dataframe的转换
  8. 李峋同款-C语言版本-爱心
  9. educode实训平台---二维码名片制作
  10. POJ 百炼 保研机试 2807:两倍