BZOJ 1975 魔法猪学院(A*求K短路)
2024-08-24 09:19:26
显然每次贪心的走最少消耗的路径即可。那么也就是找出最短路,次短路,,,K短路之后消耗E的能量的最多的路径条数。
也就是裸的A*算法。
#include <bits/stdc++.h>
using namespace std;
typedef double lf;
const int N=, M=;
lf d[N], En;
typedef pair<lf, int> pr;
#define mkpr(x, y) make_pair<lf, int> (x, y)
priority_queue<pr, vector<pr>, greater<pr> >q;
struct Gr {
struct E {
int next, to;
lf w;
}e[M];
int n, ihead[N], cnt;
void add(int x, int y, lf w) {
e[++cnt]=(E){ihead[x], y, w}; ihead[x]=cnt;
}
void dij() {
static bool vis[N];
memset(vis, , sizeof(bool)*(n+));
for(int i=; i<=n; ++i) {
d[i]=1e150;
}
d[n]=;
q.push(mkpr((lf), n));
while(q.size()) {
int x=q.top().second;
q.pop();
if(vis[x]) {
continue;
}
vis[x]=;
for(int i=ihead[x]; i; i=e[i].next) {
int y=e[i].to;
if(d[y]>d[x]+e[i].w) {
d[y]=d[x]+e[i].w;
q.push(mkpr(d[y], y));
}
}
}
}
int getans() {
int ans=;
q.push(mkpr(d[], ));
while(En> && q.size()) {
int x=q.top().second;
lf g=q.top().first-d[x];
q.pop();
if(x==n) {
if(En>=g) {
En-=g;
++ans;
continue;
}
else {
break;
}
}
for(int i=ihead[x]; i; i=e[i].next) {
int y=e[i].to;
lf w=e[i].w;
// 有精度误差啊,不能乱减枝啊
q.push(mkpr(g+w+d[y], y));
}
}
return ans;
}
}g, G;
int main() {
int n, m;
scanf("%d%d%lf", &n, &m, &En);
g.n=G.n=n;
for(int i=; i<=m; ++i) {
int x, y;
lf e;
scanf("%d%d%lf", &x, &y, &e);
g.add(x, y, e);
G.add(y, x, e);
}
G.dij();
printf("%d\n", g.getans());
return ;
}
最新文章
- Theano3.5-练习之深度卷积网络
- A.Kaw矩阵代数初步学习笔记 9. Adequacy of Solutions
- cocos2d Slider 透明滑动部件无法生成解决办法
- Gradle的属性设置大全
- Crystal Reports ";Access to report file denied. Another program may be using it.";
- 实用手册:130+ 提高开发效率的 vim 常用命令
- 安卓开发-See the log file\.metadata\.log.
- 在listener或者工具中使用spring容器中的bean实例
- python中string模块各属性以及函数的用法
- 封装fastjson为spring mvc的json view
- log4j输出到指定日志文件
- JavaScript String(字符串对象)
- BZOJ 4503: 两个串 [FFT]
- 关于ES5的indexof()和ES7的includes()的区别
- nacos作为配置中心
- angular 设置年份选择下拉框,并默认今年
- MapReduce ----倒排索引
- Linux:回收循环创建的多个线程
- (转)Maven学习总结(八)——使用Maven构建多模块项目
- poj 2240 Arbitrage 题解
热门文章
- 第五周 mybash的实现
- 记一次SpringBoot使用WebUploader的坑
- [WC2010][BZOJ1758]重建计划-[二分+分数规划+点分治]
- c++静态变量
- cookie和session在Django中的应用
- ubuntu的学习教程(常用操作)
- mybatis按datetime条件查询,参数为时间戳时
- 袋鼠云研发手记 | 开源&#183;数栈-扩展FlinkSQL实现流与维表的join
- #Ubuntu 18.04 安装tensorflow-gpu 1.9
- Beta冲刺第二周王者荣耀交流协会第四次会议