显然是类似k短路,直接不停增广即可

好久没写A*了,裸的A*可能会TLE

加点剪枝就卡过去了………

  1. type node=record
  2. po,next:longint;
  3. cost:double;
  4. end;
  5. point=record
  6. loc:longint;
  7. num:double;
  8. end;
  9.  
  10. var e,ee:array[..] of node;
  11. d:array[..] of double;
  12. q:array[..] of longint;
  13. h:array[..] of point;
  14. p,pp:array[..] of longint;
  15. v:array[..] of boolean;
  16. ans,t,x,y,i,len,n,m:longint;
  17. z,te:double;
  18.  
  19. procedure swap(var a,b:point);
  20. var c:point;
  21. begin
  22. c:=a;
  23. a:=b;
  24. b:=c;
  25. end;
  26.  
  27. procedure add(x,y:longint; z:double);
  28. begin
  29. e[i].po:=y;
  30. e[i].next:=p[x];
  31. e[i].cost:=z;
  32. p[x]:=i;
  33. end;
  34.  
  35. procedure eadd(x,y:longint; z:double);
  36. begin
  37. ee[i].po:=y;
  38. ee[i].next:=pp[x];
  39. ee[i].cost:=z;
  40. pp[x]:=i;
  41. end;
  42.  
  43. procedure spfa;
  44. var f,r,i,x,y:longint;
  45. begin
  46. for i:= to n- do
  47. d[i]:=1e40;
  48. d[n]:=;
  49. f:=;
  50. r:=;
  51. q[]:=n;
  52. while f<=r do
  53. begin
  54. x:=q[f];
  55. v[x]:=false;
  56. i:=pp[x];
  57. while i<> do
  58. begin
  59. y:=ee[i].po;
  60. if d[y]>d[x]+ee[i].cost then
  61. begin
  62. d[y]:=d[x]+ee[i].cost;
  63. if not v[y] then
  64. begin
  65. v[y]:=true;
  66. inc(r);
  67. q[r]:=y;
  68. end;
  69. end;
  70. i:=ee[i].next;
  71. end;
  72. inc(f);
  73. end;
  74. end;
  75.  
  76. procedure sift(i:longint);
  77. var j:longint;
  78. begin
  79. j:=i shl ;
  80. while j<=t do
  81. begin
  82. if (j<t) and (h[j].num>h[j+].num) then inc(j);
  83. if h[i].num>h[j].num then
  84. begin
  85. swap(h[i],h[j]);
  86. i:=j;
  87. j:=j shl ;
  88. end
  89. else break;
  90. end;
  91. end;
  92.  
  93. procedure up(i:longint);
  94. var j:longint;
  95. begin
  96. j:=i shr ;
  97. while j> do
  98. begin
  99. if h[i].num<h[j].num then
  100. begin
  101. swap(h[i],h[j]);
  102. i:=j;
  103. j:=j shr ;
  104. end
  105. else break;
  106. end;
  107. end;
  108.  
  109. procedure astar;
  110. var i,x,y:longint;
  111. dis:double;
  112.  
  113. begin
  114. h[].loc:=;
  115. h[].num:=d[];
  116. t:=;
  117. while t> do
  118. begin
  119. x:=h[].loc;
  120. dis:=h[].num-d[x];
  121. swap(h[],h[t]);
  122. dec(t);
  123. sift();
  124. if x=n then
  125. begin
  126. if te<dis then break
  127. else begin
  128. inc(ans);
  129. te:=te-dis;
  130. end;
  131. // writeln(te,' ',dis);
  132. end;
  133. i:=p[x];
  134. while i<> do
  135. begin
  136. y:=e[i].po;
  137. if dis+e[i].cost+d[y]<=te then
  138. begin
  139. inc(t);
  140. h[t].loc:=y;
  141. h[t].num:=dis+e[i].cost+d[y];
  142. up(t);
  143. end;
  144. i:=e[i].next;
  145. end;
  146. end;
  147. end;
  148.  
  149. begin
  150. readln(n,m,te);
  151. for i:= to m do
  152. begin
  153. readln(x,y,z);
  154. add(x,y,z);
  155. eadd(y,x,z);
  156. end;
  157. spfa;
  158. astar;
  159. writeln(ans);
  160. end.

bzoj1975的更多相关文章

  1. BZOJ1975 [Sdoi2010]魔法猪学院 k短路

    欢迎访问~原文出处——博客园-zhouzhendong 去博客园看该题解 题目传送门 - BZOJ1975 题意概括 给出一个无向图,让你走不同的路径,从1到n,路径长度之和不超过E,求最大路径条数. ...

  2. BZOJ1975 SDOI2010魔法猪学院(启发式搜索+最短路+堆)

    对反图跑最短路求出每个点到终点的最短路径,令其为估价函数大力A*,第k次到达某个点即是找到了到达该点的非严格第k短路,因为估价函数总是不大于实际值.bzoj可能需要手写堆.正解是可持久化可并堆,至今是 ...

  3. 【BZOJ1975】[Sdoi2010]魔法猪学院 A*

    [BZOJ1975][Sdoi2010]魔法猪学院 Description iPig在假期来到了传说中的魔法猪学院,开始为期两个月的魔法猪训练.经过了一周理论知识和一周基本魔法的学习之后,iPig对猪 ...

  4. [BZOJ1975]HH去散步 图论+矩阵

    ###[BZOJ1975]HH去散步 图论+矩阵 题目大意 要求出在一个m条边,n个点的图中,相邻两次走的边不能相同,求在t时间时从起点A走到终点B的路径方案总数.将答案mod45989 输入格式: ...

  5. BZOJ-1975 魔法猪学院 K短路 (A*+SPFA)

    1975: [Sdoi2010]魔法猪学院 Time Limit: 10 Sec Memory Limit: 64 MB Submit: 1323 Solved: 433 [Submit][Statu ...

  6. BZOJ1975 [Sdoi2010]魔法猪学院

    本文版权归ljh2000和博客园共有,欢迎转载,但须保留此声明,并给出原文链接,谢谢合作. 本文作者:ljh2000 作者博客:http://www.cnblogs.com/ljh2000-jump/ ...

  7. 【BZOJ1975】【SDOI2010】魔法猪学院(搜索,A*,贪心)

    我已经沉迷于粘贴题目地址了... 题解 很显然的贪心呀, 就是一定是最短的若干条路径的长度 所以,不断拓展k短路就可以了 至于怎么用A* 评估函数f(x)=dis[x]+g[x] 其中,dis是到N号 ...

  8. 【k短路&A*算法】BZOJ1975: [Sdoi2010]魔法猪学院

    Description 找出1~k短路的长度.   Solution k短路的求解要用到A*算法 A*算法的启发式函数f(n)=g(n)+h(n) g(n)是状态空间中搜索到n所花的实际代价 h(n) ...

  9. BZOJ1975[Sdoi2010]魔法猪学院——可持久化可并堆+最短路树

    题目描述 iPig在假期来到了传说中的魔法猪学院,开始为期两个月的魔法猪训练.经过了一周理论知识和一周基本魔法的学习之后,iPig对猪世界的世界本原有了很多的了解:众所周知,世界是由元素构成的:元素与 ...

随机推荐

  1. JAVASCRIPT、ANDROID、C#分别实现普通日期转换多少小时前、多少分钟前、多少秒

    貌似最近很流行这个,就写了个js函数实现之 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> ...

  2. aes 解密出现 java.lang.NumberFormatException: Invalid int: "ch"

    原因: 将加密/解密的seed 和 加密内容顺序放反.  decrypt(String seed, String encrypted) 附上AES解密/加密代码(android开发): package ...

  3. SQL语言笔记

      字符串用单引号',判断用单等号=,两个单引号''转义为一个单引号' 不等号是<> 不区分大小写 []括起来的要不是关键字,要不是非法变量,比如空格隔起来的变量   创建与删除数据库 - ...

  4. uva 10626

    dp 记忆化搜索 3个1元和1个10元的情况不能少 #include <cstdio> #include <cstdlib> #include <cmath> #i ...

  5. 配置sql server2012属性 ms-help://MS.SQLCC.v10/MS.SQLSVR.v10.zh-CHS/s10de_5techref/html/6df812ad-4d80-4503-8a23-47719ce85624.htm

    服务与服务器是两个不同的概念,服务器是提供服务的计算机,配置服务器主要是对内存.处理器.安全性等几个方面配置.由于SQL Server 2005服务器的设置参数比较多,这里选一些比较常用的介绍. 配置 ...

  6. Web Server 和 HTTP协议(转)

    转自:http://www.kuqin.com/shuoit/20150809/347488.html 一直在找实习,有点什么东西直接就在evernote里面记了,也没时间来更新到这里.找实习真是个蛋 ...

  7. Corner case

    A corner case (or pathological case) is a problem or situation that occurs only outside of normal op ...

  8. C#学习笔记:泛型委托Action<T>和Fun<TResult>

    转自:http://www.cnblogs.com/Joetao/articles/2094271.html 本节学习了泛型委托Action<T>和Fun<TResult>两类 ...

  9. windows cmd控制台打开和关闭SqlServer 以及 显示发生系统错误5 拒绝访问的解决方案

    打开:net start mssqlserver 关闭:net stop mssqlserver 在dos下输入 net start mssqlserver 显示发生系统错误5 拒绝访问 解决办法,以 ...

  10. Strust2最基本使用

    制作一个登陆表单,然后在另一个页面显示提交的内容,简单的一个小工程. 页面: //login.jsp <form action="login.action" method=& ...