bzoj1975
显然是类似k短路,直接不停增广即可
好久没写A*了,裸的A*可能会TLE
加点剪枝就卡过去了………
- type node=record
- po,next:longint;
- cost:double;
- end;
- point=record
- loc:longint;
- num:double;
- end;
- var e,ee:array[..] of node;
- d:array[..] of double;
- q:array[..] of longint;
- h:array[..] of point;
- p,pp:array[..] of longint;
- v:array[..] of boolean;
- ans,t,x,y,i,len,n,m:longint;
- z,te:double;
- procedure swap(var a,b:point);
- var c:point;
- begin
- c:=a;
- a:=b;
- b:=c;
- end;
- procedure add(x,y:longint; z:double);
- begin
- e[i].po:=y;
- e[i].next:=p[x];
- e[i].cost:=z;
- p[x]:=i;
- end;
- procedure eadd(x,y:longint; z:double);
- begin
- ee[i].po:=y;
- ee[i].next:=pp[x];
- ee[i].cost:=z;
- pp[x]:=i;
- end;
- procedure spfa;
- var f,r,i,x,y:longint;
- begin
- for i:= to n- do
- d[i]:=1e40;
- d[n]:=;
- f:=;
- r:=;
- q[]:=n;
- while f<=r do
- begin
- x:=q[f];
- v[x]:=false;
- i:=pp[x];
- while i<> do
- begin
- y:=ee[i].po;
- if d[y]>d[x]+ee[i].cost then
- begin
- d[y]:=d[x]+ee[i].cost;
- if not v[y] then
- begin
- v[y]:=true;
- inc(r);
- q[r]:=y;
- end;
- end;
- i:=ee[i].next;
- end;
- inc(f);
- end;
- end;
- procedure sift(i:longint);
- var j:longint;
- begin
- j:=i shl ;
- while j<=t do
- begin
- if (j<t) and (h[j].num>h[j+].num) then inc(j);
- if h[i].num>h[j].num then
- begin
- swap(h[i],h[j]);
- i:=j;
- j:=j shl ;
- end
- else break;
- end;
- end;
- procedure up(i:longint);
- var j:longint;
- begin
- j:=i shr ;
- while j> do
- begin
- if h[i].num<h[j].num then
- begin
- swap(h[i],h[j]);
- i:=j;
- j:=j shr ;
- end
- else break;
- end;
- end;
- procedure astar;
- var i,x,y:longint;
- dis:double;
- begin
- h[].loc:=;
- h[].num:=d[];
- t:=;
- while t> do
- begin
- x:=h[].loc;
- dis:=h[].num-d[x];
- swap(h[],h[t]);
- dec(t);
- sift();
- if x=n then
- begin
- if te<dis then break
- else begin
- inc(ans);
- te:=te-dis;
- end;
- // writeln(te,' ',dis);
- end;
- i:=p[x];
- while i<> do
- begin
- y:=e[i].po;
- if dis+e[i].cost+d[y]<=te then
- begin
- inc(t);
- h[t].loc:=y;
- h[t].num:=dis+e[i].cost+d[y];
- up(t);
- end;
- i:=e[i].next;
- end;
- end;
- end;
- begin
- readln(n,m,te);
- for i:= to m do
- begin
- readln(x,y,z);
- add(x,y,z);
- eadd(y,x,z);
- end;
- spfa;
- astar;
- writeln(ans);
- end.
bzoj1975的更多相关文章
- BZOJ1975 [Sdoi2010]魔法猪学院 k短路
欢迎访问~原文出处——博客园-zhouzhendong 去博客园看该题解 题目传送门 - BZOJ1975 题意概括 给出一个无向图,让你走不同的路径,从1到n,路径长度之和不超过E,求最大路径条数. ...
- BZOJ1975 SDOI2010魔法猪学院(启发式搜索+最短路+堆)
对反图跑最短路求出每个点到终点的最短路径,令其为估价函数大力A*,第k次到达某个点即是找到了到达该点的非严格第k短路,因为估价函数总是不大于实际值.bzoj可能需要手写堆.正解是可持久化可并堆,至今是 ...
- 【BZOJ1975】[Sdoi2010]魔法猪学院 A*
[BZOJ1975][Sdoi2010]魔法猪学院 Description iPig在假期来到了传说中的魔法猪学院,开始为期两个月的魔法猪训练.经过了一周理论知识和一周基本魔法的学习之后,iPig对猪 ...
- [BZOJ1975]HH去散步 图论+矩阵
###[BZOJ1975]HH去散步 图论+矩阵 题目大意 要求出在一个m条边,n个点的图中,相邻两次走的边不能相同,求在t时间时从起点A走到终点B的路径方案总数.将答案mod45989 输入格式: ...
- BZOJ-1975 魔法猪学院 K短路 (A*+SPFA)
1975: [Sdoi2010]魔法猪学院 Time Limit: 10 Sec Memory Limit: 64 MB Submit: 1323 Solved: 433 [Submit][Statu ...
- BZOJ1975 [Sdoi2010]魔法猪学院
本文版权归ljh2000和博客园共有,欢迎转载,但须保留此声明,并给出原文链接,谢谢合作. 本文作者:ljh2000 作者博客:http://www.cnblogs.com/ljh2000-jump/ ...
- 【BZOJ1975】【SDOI2010】魔法猪学院(搜索,A*,贪心)
我已经沉迷于粘贴题目地址了... 题解 很显然的贪心呀, 就是一定是最短的若干条路径的长度 所以,不断拓展k短路就可以了 至于怎么用A* 评估函数f(x)=dis[x]+g[x] 其中,dis是到N号 ...
- 【k短路&A*算法】BZOJ1975: [Sdoi2010]魔法猪学院
Description 找出1~k短路的长度. Solution k短路的求解要用到A*算法 A*算法的启发式函数f(n)=g(n)+h(n) g(n)是状态空间中搜索到n所花的实际代价 h(n) ...
- BZOJ1975[Sdoi2010]魔法猪学院——可持久化可并堆+最短路树
题目描述 iPig在假期来到了传说中的魔法猪学院,开始为期两个月的魔法猪训练.经过了一周理论知识和一周基本魔法的学习之后,iPig对猪世界的世界本原有了很多的了解:众所周知,世界是由元素构成的:元素与 ...
随机推荐
- JAVASCRIPT、ANDROID、C#分别实现普通日期转换多少小时前、多少分钟前、多少秒
貌似最近很流行这个,就写了个js函数实现之 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> ...
- aes 解密出现 java.lang.NumberFormatException: Invalid int: "ch"
原因: 将加密/解密的seed 和 加密内容顺序放反. decrypt(String seed, String encrypted) 附上AES解密/加密代码(android开发): package ...
- SQL语言笔记
字符串用单引号',判断用单等号=,两个单引号''转义为一个单引号' 不等号是<> 不区分大小写 []括起来的要不是关键字,要不是非法变量,比如空格隔起来的变量 创建与删除数据库 - ...
- uva 10626
dp 记忆化搜索 3个1元和1个10元的情况不能少 #include <cstdio> #include <cstdlib> #include <cmath> #i ...
- 配置sql server2012属性 ms-help://MS.SQLCC.v10/MS.SQLSVR.v10.zh-CHS/s10de_5techref/html/6df812ad-4d80-4503-8a23-47719ce85624.htm
服务与服务器是两个不同的概念,服务器是提供服务的计算机,配置服务器主要是对内存.处理器.安全性等几个方面配置.由于SQL Server 2005服务器的设置参数比较多,这里选一些比较常用的介绍. 配置 ...
- Web Server 和 HTTP协议(转)
转自:http://www.kuqin.com/shuoit/20150809/347488.html 一直在找实习,有点什么东西直接就在evernote里面记了,也没时间来更新到这里.找实习真是个蛋 ...
- Corner case
A corner case (or pathological case) is a problem or situation that occurs only outside of normal op ...
- C#学习笔记:泛型委托Action<T>和Fun<TResult>
转自:http://www.cnblogs.com/Joetao/articles/2094271.html 本节学习了泛型委托Action<T>和Fun<TResult>两类 ...
- windows cmd控制台打开和关闭SqlServer 以及 显示发生系统错误5 拒绝访问的解决方案
打开:net start mssqlserver 关闭:net stop mssqlserver 在dos下输入 net start mssqlserver 显示发生系统错误5 拒绝访问 解决办法,以 ...
- Strust2最基本使用
制作一个登陆表单,然后在另一个页面显示提交的内容,简单的一个小工程. 页面: //login.jsp <form action="login.action" method=& ...