1. #include<cstdio>
  2. #include<queue>
  3. #include<cstring>
  4. using namespace std;
  5. const int maxn=2e6+5;
  6. struct asd{
  7. int from,to,next,val;
  8. }b[maxn],b2[maxn];
  9. int head[maxn],tot=1;
  10. int h2[maxn],t2=1;
  11. int n,m;
  12. void ad(int aa,int bb,int cc){
  13. b[tot].from=aa;
  14. b[tot].to=bb;
  15. b[tot].val=cc;
  16. b[tot].next=head[aa];
  17. head[aa]=tot++;
  18. }
  19. void ad2(int aa,int bb,int cc){
  20. b2[t2].from=aa;
  21. b2[t2].to=bb;
  22. b2[t2].val=cc;
  23. b2[t2].next=h2[aa];
  24. h2[aa]=t2++;
  25. }
  26. struct jie{
  27. int num,dis;
  28. jie(int aa=0,int bb=0){
  29. num=aa,dis=bb;
  30. }
  31. bool operator < (const jie& A) const{
  32. return dis>A.dis;
  33. }
  34. };
  35. priority_queue<jie> q;
  36. int dis[maxn];
  37. bool vis[maxn];
  38. void DIJ(int xx){
  39. dis[xx]=0;
  40. q.push(jie(xx,0));
  41. while(!q.empty()){
  42. int now=q.top().num;
  43. q.pop();
  44. if(vis[now]) continue;
  45. vis[now]=1;
  46. for(int i=head[now];i!=-1;i=b[i].next){
  47. int u=b[i].to;
  48. if(dis[u]>dis[now]+b[i].val){
  49. dis[u]=dis[now]+b[i].val;
  50. q.push(jie(u,dis[u]));
  51. }
  52. }
  53. }
  54. }
  55. struct as{
  56. int qd,hx,gx;
  57. as(int aa=0,int bb=0,int cc=0){
  58. qd=aa,hx=bb,gx=cc;
  59. }
  60. bool operator < (const as& A) const{
  61. return hx+gx>A.hx+A.gx;
  62. }
  63. };
  64. int cnt[maxn];
  65. priority_queue<as> qq;
  66. int Astar(int s,int t,int k){
  67. if(dis[s]==0x3f3f3f3f) return -1;
  68. qq.push(as(s,dis[s],0));
  69. while(!qq.empty()){
  70. int nqd=qq.top().qd,nhx=qq.top().hx,ngx=qq.top().gx;
  71. qq.pop();
  72. cnt[nqd]++;
  73. if(cnt[nqd]==k && nqd==t) return ngx;
  74. if(cnt[nqd]>k) continue;
  75. for(int i=h2[nqd];i!=-1;i=b2[i].next){
  76. int u=b2[i].to;
  77. qq.push(as(u,dis[u],ngx+b2[i].val));
  78. }
  79. }
  80. return -1;
  81. }
  82. int main(){
  83. memset(dis,0x3f,sizeof(dis));
  84. memset(head,-1,sizeof(head));
  85. memset(h2,-1,sizeof(h2));
  86. scanf("%d%d",&n,&m);
  87. for(int i=1;i<=m;i++){
  88. int aa,bb,cc;
  89. scanf("%d%d%d",&aa,&bb,&cc);
  90. ad2(aa,bb,cc);
  91. ad(bb,aa,cc);
  92. }
  93. int s,t,k;
  94. scanf("%d%d%d",&s,&t,&k);
  95. if(s==t) ++k;
  96. DIJ(t);
  97. printf("%d\n",Astar(s,t,k));
  98. return 0;
  99. }

A*算法求K短路模板 POJ 2449的更多相关文章

  1. 图论(A*算法,K短路) :POJ 2449 Remmarguts' Date

    Remmarguts' Date Time Limit: 4000MS   Memory Limit: 65536K Total Submissions: 25216   Accepted: 6882 ...

  2. K短路模板POJ 2449 Remmarguts' Date

      Time Limit: 4000MS   Memory Limit: 65536K Total Submissions:32863   Accepted: 8953 Description &qu ...

  3. bellman-ford算法求K短路O(n*m),以及判负环O(n*m)

    #include<iostream> #include<algorithm> #include<cstring> using namespace std; cons ...

  4. Dijkstra算法求最短路模板

    Dijkstra算法适合求不包含负权路的最短路径,通过点增广.在稠密图中使用优化过的版本速度非常可观.本篇不介绍算法原理.只给出模板,这里给出三种模板,其中最实用的是加上了堆优化的版本 算法原理 or ...

  5. k短路模板 POJ2449

    采用A*算法的k短路模板 #include <iostream> #include <cstdio> #include <cstring> #include < ...

  6. A*算法的认识与求第K短路模板

    现在来了解A*算法是什么 现在来解决A*求K短路问题 在一个有权图中,从起点到终点最短的路径成为最短路,第2短的路成为次短路,第3短的路成为第3短路,依此类推,第k短的路成为第k短路.那么,第k短路怎 ...

  7. POJ 2449Remmarguts' Date K短路模板 SPFA+A*

    K短路模板,A*+SPFA求K短路.A*中h的求法为在反图中做SPFA,求出到T点的最短路,极为估价函数h(这里不再是估价,而是准确值),然后跑A*,从S点开始(此时为最短路),然后把与S点能达到的点 ...

  8. [poj2449]Remmarguts' Date(K短路模板题,A*算法)

    解题关键:k短路模板题,A*算法解决. #include<cstdio> #include<cstring> #include<algorithm> #includ ...

  9. poj 2499第K短路模板

    第k*短路模板(单项边) #include <iostream> #include <cstdio> #include <algorithm> #include & ...

随机推荐

  1. 【大厂面试04期】讲讲一条MySQL更新语句是怎么执行的?

    流程图 这是在网上找到的一张流程图,写的比较好,大家可以先看图,然后看详细阅读下面的各个步骤. 执行流程: 1.连接验证及解析 客户端与MySQL Server建立连接,发送语句给MySQL Serv ...

  2. hadoop启动后,9000端口无法连接,netstat -tpnl中找不到该端口

    已解决: 需要重新格式化hdfs. 1.停止hdfs: 2.删除hdfs的相关文件目录(hdfs-site.xml中配置的存放文件的目录). 3.启动journalnode:sbin/hadoop-d ...

  3. ZooKeeper 基础入门

    什么是ZooKeeper Apache ZooKeeper 是一个开源的实现高可用的分布式协调服务器.ZooKeeper是一种集中式服务,用于维护配置信息,域名服务,提供分布式同步和集群管理.所有这些 ...

  4. Hadoop之hadoop fs和hdfs dfs、hdfs fs三者区别

      适用范围 案例 备注 小记 hadoop fs 使用范围最广,对象:可任何对象       hadoop dfs 只HDFS文件系统相关       hdfs fs 只HDFS文件系统相关(包括与 ...

  5. 循序渐进VUE+Element 前端应用开发(9)--- 界面语言国际化的处理

    我们开发的系统,一般可以不用考虑语言国际化的问题,大多数系统一般是给本国人使用的,而且直接使用中文开发界面会更加迅速 一些,不过框架最好能够支持国际化的处理,以便在需要的时候,可以花点时间来实现多语言 ...

  6. App接口设计之token的php实现

    为了保证移动端和服务端数据传输相对安全,需要对接口进行加密传输. 一.ttoken的设计目的:  因为APP端没有和PC端一样的session机制,所以无法判断用户是否登陆,以及无法保持用户状态,所以 ...

  7. redis 深入理解redis 主从复制原理

    redis 主从复制 master 节点提供数据,也就是写.slave 节点负责读. 不是说master 分支不能读数据,也能只是我们希望将读写进行分离. slave 是不能写数据的,只能处理读请求 ...

  8. CRC16冗余循环检测计算器-好用。modbus RTU

    开始使用 http://cht.nahua.com.tw/index.php?url=http://cht.nahua.com.tw/software/crc16/&key=Modbus,%2 ...

  9. 跨云厂商部署 k3s 集群

    原文链接:https://fuckcloudnative.io/posts/deploy-k3s-cross-public-cloud/ 最近一两年各大云服务商都出了各种福利活动,很多小伙伴薅了一波又 ...

  10. [转]IP地址和MAV地址——区别和联系

    [转载]http://wenda.tianya.cn/question/27f9476d1e86f6b6 一.IP地址  对于IP地址,相信大家都很熟悉,即指使用TCP/IP协议指定给主机的32位地址 ...