BZOJ_1975_[Sdoi2010]魔法猪学院_A*
BZOJ_1975_[Sdoi2010]魔法猪学院_A*
Description
Input
Output
Sample Input
1 2 1.5
2 1 1.5
1 3 3
2 3 1.5
3 4 1.5
1 4 1.5
Sample Output
3
题意很明确,问最多能跑几次,其实就是K短路,每次判断长度和生育能量的大小即可。
K短路这里使用A*(可持久化可并堆做法挖坑代填)
估价函数设置为当前走过的距离+最短到终点的距离。
最短到终点的距离用dij预处理出来。
代码:
#include <stdio.h>
#include <string.h>
#include <algorithm>
#include <stdlib.h>
#include <ext/pb_ds/priority_queue.hpp>
using namespace std;
using namespace __gnu_pbds;
inline int rd() {
register int x=0;
register char s=getchar();
while(s<'0'||s>'9') s=getchar();
while(s>='0'&&s<='9') x=(x<<3)+(x<<1)+s-'0',s=getchar();
return x;
}
typedef double f2;
#define N 5050
#define M 200050
int head[N],to[M],nxt[M],cnt,n,m,xx[M],yy[M],vis[N],tot[N],ans;
f2 val[M],zz[M],dis[N],lft;
__attribute__((optimize("-O2")))struct node {
f2 v;
int x;
node() {}
node(f2 v_,int x_) :
v(v_),x(x_) {}
inline bool operator < (const node &u) const {
return v+dis[x]>u.v+dis[u.x];
}
};
__gnu_pbds::priority_queue<pair<f2,int> >q1;
__gnu_pbds::priority_queue<node>q2;
__attribute__((optimize("-O2")))inline void add(int u,int v,f2 w) {
to[++cnt]=v; nxt[cnt]=head[u]; head[u]=cnt; val[cnt]=w;
}
__attribute__((optimize("-O2")))void dij() {
memset(dis,0x7f,sizeof(dis));
dis[n]=0; q1.push(make_pair(0,n));
while(!q1.empty()) {
int x=q1.top().second,i; q1.pop();
if(vis[x]) continue;
vis[x]=1;
for(i=head[x];i;i=nxt[i]) {
if(dis[to[i]]>dis[x]+val[i]) {
dis[to[i]]=dis[x]+val[i];
q1.push(make_pair(-dis[to[i]],to[i]));
}
}
}
}
__attribute__((optimize("-O2")))void _A_stAr_SapPh1r3_() {
f2 inf=lft/dis[1];
q2.push(node(0,1));
while(!q2.empty()) {
node t=q2.top(); q2.pop();
int x=t.x;
f2 v=t.v;
// printf("%f\n",lft);
int i;
if(x==n) {
if(lft>=v) {
lft-=v; ans++;
}else {
printf("%d\n",ans); exit(0);
}
}
for(i=head[x];i;i=nxt[i]) {
q2.push(node(v+val[i],to[i]));
}
}
}
__attribute__((optimize("-O2")))int main() {
n=rd(); m=rd(); scanf("%lf",&lft);
int i;
for(i=1;i<=m;i++) {
xx[i]=rd(); yy[i]=rd(); scanf("%lf",&zz[i]);
add(yy[i],xx[i],zz[i]);
}
dij();
//lft/=dis[1];
memset(head,0,sizeof(head)); cnt=0;
for(i=1;i<=m;i++) {
add(xx[i],yy[i],zz[i]);
}
_A_stAr_SapPh1r3_();
printf("%d\n",ans);
}
BZOJ_1975_[Sdoi2010]魔法猪学院_A*的更多相关文章
- Bzoj 1975: [Sdoi2010]魔法猪学院 dijkstra,堆,A*,K短路
1975: [Sdoi2010]魔法猪学院 Time Limit: 10 Sec Memory Limit: 64 MBSubmit: 1357 Solved: 446[Submit][Statu ...
- bzoj 1975: [Sdoi2010]魔法猪学院 [k短路]
1975: [Sdoi2010]魔法猪学院 裸题... 被double坑死了 #include <iostream> #include <cstdio> #include &l ...
- K短路 (A*算法) [Usaco2008 Mar]牛跑步&[Sdoi2010]魔法猪学院
A*属于搜索的一种,启发式搜索,即:每次搜索时加一个估价函数 这个算法可以用来解决K短路问题,常用的估价函数是:已经走过的距离+期望上最短的距离 通常和Dijkstra一起解决K短路 BZOJ1598 ...
- bzoj 1975 [Sdoi2010]魔法猪学院
1975: [Sdoi2010]魔法猪学院 Time Limit: 10 Sec Memory Limit: 64 MBSubmit: 1758 Solved: 557[Submit][Statu ...
- P2483 [SDOI2010]魔法猪学院
P2483 [SDOI2010]魔法猪学院 摘要 --> 题目描述 iPig在假期来到了传说中的魔法猪学院,开始为期两个月的魔法猪训练.经过了一周理论知识和一周基本魔法的学习之后,iPig对猪世 ...
- [BZOJ1975][SDOI2010]魔法猪学院(k短路,A*)
1975: [Sdoi2010]魔法猪学院 Time Limit: 10 Sec Memory Limit: 64 MBSubmit: 2748 Solved: 883[Submit][Statu ...
- 【BZOJ1975】[Sdoi2010]魔法猪学院 A*
[BZOJ1975][Sdoi2010]魔法猪学院 Description iPig在假期来到了传说中的魔法猪学院,开始为期两个月的魔法猪训练.经过了一周理论知识和一周基本魔法的学习之后,iPig对猪 ...
- bzoj1975: [Sdoi2010]魔法猪学院【k短路&A*算法】
1975: [Sdoi2010]魔法猪学院 Time Limit: 10 Sec Memory Limit: 64 MBSubmit: 2446 Solved: 770[Submit][Statu ...
- [SDOI2010]魔法猪学院(A*,最短路)
[SDOI2010]魔法猪学院(luogu) Description 题目描述 iPig在假期来到了传说中的魔法猪学院,开始为期两个月的魔法猪训练.经过了一周理论知识和一周基本魔法的学习之后,iPig ...
随机推荐
- 【深度学习】目标检测算法总结(R-CNN、Fast R-CNN、Faster R-CNN、FPN、YOLO、SSD、RetinaNet)
目标检测是很多计算机视觉任务的基础,不论我们需要实现图像与文字的交互还是需要识别精细类别,它都提供了可靠的信息.本文对目标检测进行了整体回顾,第一部分从RCNN开始介绍基于候选区域的目标检测器,包括F ...
- oracle查询表索引
转载 http://blog.sina.com.cn/s/blog_5376c7190101hvvb.html 如下: select * from user_indexes where table_n ...
- JVM-GC工作原理
配置Garbage Collection 2012-09-17 14:53:18 分类: Java 上面这幅图是我从网络上摘到的,它展现了在一个的理想系统的模型下GC对系统的影响.图的最顶上红色 ...
- windows环境下zookeeper安装和使用
一.简介 zooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,是Google的Chubby一个开源的实现,是Hadoop和Hbase的重要组件.它是一个为分布式应用提供一 ...
- Windows 2003 Server 标准版启动问题解决(资源转贴)
维护的系统之一是部署在windows2003 Server标准版的服务器上,可能是由于某个应用问题,导致远程重启失败,害得我在机房呆了一早晨,可算是够折腾的.最后按照官方文档解决,刚放文档地址是:ht ...
- es6(五):class关键字(extends,super,static)
ES5中,生成对象通过构造函数: function A(name,age){ this.name=name; this.age=age } // 在A的prototype属性上定义一个test方法,即 ...
- FPGA中的除法运算及初识AXI总线
FPGA中的硬件逻辑与软件程序的区别,相信大家在做除法运算时会有深入体会.硬件逻辑实现的除法运算会占用较多的资源,电路结构复杂,且通常无法在一个时钟周期内完成.因此FPGA实现除法运算并不是一个&qu ...
- 进阶-Redis 知识梳理
redis介绍 1.什么是NoSQL NoSQL(统称),泛指非关系型的数据库,NoSQL即Not-Only SQL,它可以作为关系型数据库的良好补充. 2.NoSQL数据库的四大分类如下: 键值(K ...
- .NET Core使用微软官方类库实现汉字转拼音
一.NuGet包 拼音:Install-Package SimplifiedChinesePinYinConversion 简体-繁体互转:Install-Package TraditionalChi ...
- ubuntu18.04安装搜狗拼音
1.下载好搜狗安装包http://pinyin.sogou.com/linux/ ,注意位数! 2.打开终端安装依赖 sudo apt install libfcitx-qt0 3.提取下载好的 ...