传送门:

http://www.qscoj.cn/#/problem/show/1987

童心未泯的帆宝和乐爷 Edit

Time Limit: 10000 MS     Memory Limit: 256 MB
Submit Status

6·1即将来临,游乐园推出了新的主题活动,雨过天晴,帆宝乐爷童心未泯,准备一探究竟。

兴奋的他们一入园便和孩子们打成一片,不知不觉便走散了。

当他们意识到的时候,只能通过手机来确认对方的位置。

他们当然想尽快找到对方,然而由于孩子们实在是太多,只能选择距离稍远的但是游客稀少的路会合。

帆宝希望找到第kk 短的路径,这条路径是他认为的幸运路径。

帆宝迫切地想知道该条路径的长度,而乐于助人的你也一定会帮助她的。

Input

第一行三个整数n,m,kn,m,k ,分别表示游乐园的景点数目、景点之间的道路数目以及路径长度从小到大排列时希望选择的序号。

第二行两个整数S,TS,T ,分别表示帆宝乐爷所在景点的编号。

接下来mm 行,每行三个整数u,v,wu,v,w ,表示编号为uu 和vv 的景点之间有一条长度为ww 的单向通路。

1≤n≤1000,0≤m≤100000,1≤k≤1000,1≤S,T,u,v≤N,1≤w≤1001≤n≤1000,0≤m≤100000,1≤k≤1000,1≤S,T,u,v≤N,1≤w≤100

Output

第一行一个整数xx ,表示所选路径的长度

无解输出−1−1

Sample input and output

Sample Input Sample Output
  1. 3 3 2
  2. 1 2
  3. 1 2 2
  4. 1 3 4
  5. 3 2 1
  1. 5

Hint

Source

2018 UESTC ACM Training for Search Algorithm and String
 
分析:
第k短路,A*+spfa解决
属于模板题
但是我A*+优化的迪杰斯特拉超时 。。。
mmp
还拿着在poj交了一道题,可以过啊
应该是测试数据不适合迪杰斯特拉吧
。。。。。。。。。。(自我安慰)
 
code:
  1. #include <bits/stdc++.h>
  2. #define INF 0x3f3f3f3f
  3. using namespace std;
  4. const int AX = 1e5+;
  5. const int MAXN = 1e3+;
  6. int n,m,k;
  7. int s,t;
  8. int tot;
  9. int retot;
  10. struct edge
  11. {
  12. int to,w;
  13. int next1;
  14. } G[AX],RG[AX];
  15.  
  16. struct Node
  17. {
  18. int v;
  19. int f,h,g;
  20. bool operator < (const Node &a) const
  21. {
  22. return f==a.f? g>a.g : f>a.f;
  23. }
  24. };
  25.  
  26. int dis[MAXN];
  27. int head[MAXN];
  28. int rehead[AX];
  29. int vis[MAXN];
  30.  
  31. void add_edge(int u,int v,int c)
  32. {
  33. G[tot].to=v;
  34. G[tot].w=c;
  35. G[tot].next1=head[u];
  36. head[u]=tot++;
  37.  
  38. RG[retot].to=u;
  39. RG[retot].w=c;
  40. RG[retot].next1=rehead[v];
  41. rehead[v]=retot++;
  42. }
  43. void SPFA()
  44. {
  45. for(int i=; i<=n; i++) dis[i]=INF;
  46. dis[t]=;
  47. queue<int> Q;
  48. Q.push(t);
  49. while(!Q.empty())
  50. {
  51. int u=Q.front();
  52. Q.pop();
  53. for(int i=rehead[u]; i!=-; i=RG[i].next1)
  54. {
  55. int v=RG[i].to ;
  56. int w=RG[i].w ;
  57. if(dis[v]>dis[u]+w)
  58. {
  59. dis[v]=dis[u]+w;
  60. Q.push(v);
  61. }
  62. }
  63. }
  64. }
  65.  
  66. int Astar(Node a)//A*算法
  67. {
  68. memset(vis,,sizeof(vis));
  69. if(dis[s]==INF) return -;//如果没有与S相连的点
  70. if(s==t) k++;
  71. priority_queue<Node> Q;
  72. Q.push(a);
  73. while(!Q.empty())
  74. {
  75. Node tmp=Q.top();
  76. Q.pop();
  77. int v=tmp.v;
  78. vis[v]++;
  79. if(vis[t]==k) return tmp.g;
  80. for(int i=head[v]; i!=-; i=G[i].next1)
  81. {
  82. Node p;
  83. p.v=G[i].to;
  84. p.h=dis[G[i].to];
  85. p.g=tmp.g+G[i].w;
  86. p.f=p.g+p.h;
  87. Q.push(p);
  88. }
  89. }
  90. return -;
  91. }
  92.  
  93. int main()
  94. {
  95. tot=;
  96. retot=;
  97. memset(head,-,sizeof head);
  98. memset(rehead,-,sizeof rehead);
  99. scanf("%d%d%d",&n,&m,&k);
  100. scanf("%d%d",&s,&t);
  101. int x,y,w;
  102. for(int i=; i<m; i++)
  103. {
  104. scanf("%d%d%d",&x,&y,&w);
  105. add_edge(x,y,w);
  106. }
  107. SPFA();
  108. Node a;
  109. a.v=s;
  110. a.g=;
  111. a.h=dis[s];
  112. a.f=a.g+a.h;
  113. int g=Astar(a);
  114. printf("%d\n",g);
  115. return ;
  116. }

也贴一下超时的A*+优化的迪杰斯特拉

  1. #include <iostream>
  2. #include <cstdio>
  3. #include<stdio.h>
  4. #include<algorithm>
  5. #include<cstring>
  6. #include<math.h>
  7. #include<memory>
  8. #include<queue>
  9. #include<vector>
  10. using namespace std;
  11. typedef long long LL;
  12. #define max_v 10010
  13. #define INF 99999999
  14. struct node
  15. {
  16. int to,val;
  17. node(){}
  18. node(int a,int b)
  19. {
  20. to=a;
  21. val=b;
  22. }
  23. };
  24. vector<node> e[max_v],ee[max_v];
  25. int n,m,k;
  26. int vis[max_v];
  27. int dis[max_v];
  28. void addEdge(int x,int y,int val)
  29. {
  30. e[x].push_back(node(y,val));
  31. ee[y].push_back(node(x,val));//把图反向
  32. }
  33. void Dijkstra(int s,int t)
  34. {
  35. priority_queue<int,vector<int>,greater<int> > q;
  36. while(!q.empty())
  37. q.pop();
  38.  
  39. for(int i=;i<=n;i++)
  40. vis[i]=,dis[i]=INF;
  41.  
  42. vis[t]=,dis[t]=,q.push(t);
  43.  
  44. int u,len;
  45. while(!q.empty())
  46. {
  47. u=q.top();
  48. q.pop();
  49.  
  50. len=ee[u].size();
  51. for(int i=;i<len;i++)
  52. {
  53. node v=ee[u][i];
  54. if(dis[v.to]>dis[u]+v.val)
  55. {
  56. dis[v.to]=dis[u]+v.val;
  57. if(!vis[v.to])
  58. {
  59. q.push(v.to);
  60. vis[v.to]=;
  61. }
  62. }
  63. }
  64. vis[u]=;
  65. }
  66. }
  67. struct Anode
  68. {
  69. int h,g,id;
  70. Anode(int a,int b,int c){h=a;g=b;id=c;}
  71. bool operator<(Anode a) const
  72. {
  73. return h+g>a.h+a.g;
  74. }
  75. };
  76. priority_queue<Anode> Q;
  77.  
  78. int Astar(int s,int t)//A*算法
  79. {
  80. while(!Q.empty())
  81. Q.pop();
  82. Q.push(Anode(,dis[s],s));
  83.  
  84. int len,num;
  85. num=;
  86. while(!Q.empty())
  87. {
  88. Anode u=Q.top();
  89. Q.pop();
  90.  
  91. if(u.id==t)
  92. ++num;
  93. if(num>=k)
  94. return u.h;
  95.  
  96. len=e[u.id].size();
  97. for(int i=;i<len;i++)
  98. {
  99. node v=e[u.id][i];
  100. Q.push(Anode(u.h+v.val,dis[v.to],v.to));
  101. }
  102. }
  103. return -;//不能连通或者没有k短路
  104. }
  105. int main()
  106. {
  107. int x,y,v,s,t;
  108. while(~scanf("%d %d %d",&n,&m,&k))
  109. {
  110. scanf("%d %d",&s,&t);
  111. for(int i=;i<max_v;i++) e[i].clear(),ee[i].clear();
  112. for(int i=;i<=m;i++)
  113. {
  114. scanf("%d%d%d",&x,&y,&v);
  115. addEdge(x,y,v);
  116. }
  117. if(s==t) k++;
  118. Dijkstra(s,t);
  119. printf("%d\n",Astar(s,t));
  120. }
  121. return ;
  122. }
  123. //有向图 第k短路模板

UESTC - 1987 童心未泯的帆宝和乐爷 (第k短路 A*算法+SPFA算法 模板)的更多相关文章

  1. UESTC 30.最短路-最短路(Floyd or Spfa(链式前向星存图))

    最短路 Time Limit: 3000/1000MS (Java/Others) Memory Limit: 65535/65535KB (Java/Others) 在每年的校赛里,所有进入决赛的同 ...

  2. cdoj1092-韩爷的梦 (字符串hash)【hash】

    http://acm.uestc.edu.cn/#/problem/show/1092 韩爷的梦 Time Limit: 200/100MS (Java/Others)     Memory Limi ...

  3. 淘宝SKU组合查询算法实现

    淘宝SKU组合查询算法实现 2015-11-14 16:18 1140人阅读 评论(0) 收藏 举报  分类: JavaScript(14)    目录(?)[+]   前端有多少事情可以做,能做到多 ...

  4. 巧用ecshop做淘宝客

    一.第一步 下载文件,可以在http://www.ecshop.com/下载ecshop各个版本的安装包,安装好ECSHOP,然后通过PTF工具下载2个文件到本地进行修改.这个2个文件分别是goods ...

  5. python就业班-淘宝-目录.txt

    卷 TOSHIBA EXT 的文件夹 PATH 列表卷序列号为 AE86-8E8DF:.│ python就业班-淘宝-目录.txt│ ├─01 网络编程│ ├─01-基本概念│ │ 01-网络通信概述 ...

  6. Python3爬虫爬取淘宝商品数据

    这次的主要的目的是从淘宝的搜索页面获取商品的信息.其实分析页面找到信息很容易,页面信息的存放都是以静态的方式直接嵌套的页面上的,很容易找到.主要困难是将信息从HTML源码中剥离出来,数据和网页源码结合 ...

  7. A*算法在最短路问题的应用及其使用举例

    1 A*算法 A*算法在人工智能中是一种典型的启发式搜索算法,启发中的估价是用估价函数表示的: 其中f(n)是节点n的估价函数,g(n)表示实际状态空间中从初始节点到n节点的实际代价,h(n)是从n到 ...

  8. [Erlang 0105] Erlang Resources 小站 2013年1月~6月资讯合集

    很多事情要做,一件一件来; Erlang Resources 小站 2013年1月~6月资讯合集,方便检索.      小站地址: http://site.douban.com/204209/     ...

  9. CodeIgniter(CI)框架中的验证码

    在CodeIgniter框架中,CI本身自带了验证码,但是查看文档的时候,发现: 需要新建一个表,用来存储验证码信息.因为习惯了session存储验证码信息,所以我把我认为比较好看的验证码应用在了CI ...

随机推荐

  1. MySQL的预编译功能

      1.预编译的好处 大家平时都使用过JDBC中的PreparedStatement接口,它有预编译功能.什么是预编译功能呢?它有什么好处呢? 当客户发送一条SQL语句给服务器后,服务器总是需要校验S ...

  2. Eclipse设置虚拟机参数 (转 构建内存溢出)

    Java -verbose:gc 中参数-verbose:gc 表示输出虚拟机中GC的详细情况. 首先在Eclipse的Debug页签中设置虚拟机参数: 步骤: 1.选中已经写好的项目 2.Run-& ...

  3. H5实现拍照上传功能

    <input type="file" capture="camera" accept="image/*" >

  4. drupal7 获取网站名称

    $site_name=variable_get('site_name', 'Drupal');

  5. Html5 锚 <a>的页内跳转, name=abc herf=#abc

    锚点是网页制作中超级链接的一种,又叫命名锚记.命名锚记像一个迅速定位器一样是一种页面内的超级链接,运用相当普遍. 英文名:anchor 使用命名锚记可以在文档中设置标记,这些标记通常放在文档的特定主题 ...

  6. .net reflector+reflexil修改编译后的dll文件

    1.用reflector打开相关的dll文件. 2.如果reflector中没有reflexil插件,点击工具栏中的Tools->Add-Ins 3.找到需要修改的文件,双击打开该文件:点击To ...

  7. java中字节流与字符流以及字节流多余字节问题

    1.字节流 字节流byte为单位对文件的数据进行写入与读取操作.字节的方式在复制音频图片文件时比较适用,但在对于普通文件的读写上有两大缺陷: 第一,字节流在读取中文字符时,若设定的字节数组长度刚好末尾 ...

  8. 深入理解C++中的初始化

    C++经过这么多年的发展,已然成了一种文化和艺术,而这种艺术和文化并不是C++所固有的,是C++在各个方面的应用的总结和艺术化的结果.C++看起来比较复杂,但是深入其中你会发现C++是那么优美而富有哲 ...

  9. web前端与后端的理解区分

    要了解web前后端的区别,首先必须得清楚什么是web前端和web后端. 首先:web的本意是蜘蛛网和网的意思,在网页设计中我们称为网页的意思.现广泛译作网络.互联网等技术领域.表现为三种形式,即超文本 ...

  10. ASP.NET中的身份验证有那些?你当前项目采用什么方式验证请解释

    ASP.NET身份验证模式包括Windows.Forms(窗体).Passport(护照)和None(无). l  Windows身份验证—常结合应用程序自定义身份验证使用使用这种身份验证模式时,AS ...