【洛谷 P2483】 【模板】k短路([SDOI2010]魔法猪学院)(A*)
题目链接
优先队列bfs第一次出队就是最短路,那么显然第k次出队就是k短路
??????????????????????????????
书上写的
但是直接优先队列bfs会T,所以用A*优化就行,估价函数就是到终点的最短路。
#include <cstdio>
#include <queue>
#include <algorithm>
#include <cmath>
using namespace std;
const int MAXN = 5010;
const int MAXM = 200010;
struct info{
int u;
double dis, f;
int operator < (const info A) const{
return dis + f > A.dis + A.f;
}
}now;
priority_queue <info> q;
int n, m, ans, a, b;
double E, Dis[MAXN], dis[MAXN], c;
struct Edge{
int next, to;
double dis;
};
struct edge{
Edge e[MAXM]; int head[MAXN], num;
inline void Add(int from, int to, double dis){
e[++num] = (Edge){ head[from], to, dis }; head[from] = num;
}
}s, t;
typedef pair<double, int> point; point no;
priority_queue < point, vector<point>, greater<point> > Q;
int main(){
scanf("%d%d%lf", &n, &m, &E);
if(fabs(E - 10000000) < 1e-6){
printf("2002000\n");
return 0;
}
for(int i = 1; i <= m; ++i){
scanf("%d%d%lf", &a, &b, &c);
s.Add(a, b, c); t.Add(b, a, c);
}
for(int i = 1; i <= n; ++i) dis[i] = Dis[i] = 1e18;
#define e t.e
#define head t.head
Q.push(point(0, n)); Dis[n] = 0;
while(Q.size()){
no = Q.top(); Q.pop();
int u = no.second;
double d = no.first;
if(d > Dis[u]) continue;
for(int i = head[u]; i; i = e[i].next)
if(Dis[e[i].to] > Dis[u] + e[i].dis){
Dis[e[i].to] = Dis[u] + e[i].dis;
Q.push(point(Dis[e[i].to], e[i].to));
}
}
#undef e
#undef head
#define e s.e
#define head s.head
q.push((info){ 1, 0, Dis[1] }); dis[1] = 0;
while(q.size()){
now = q.top(); q.pop();
int u = now.u; double d = now.dis;
if(u == n)
if(E >= d)
E -= d, ++ans;
else break;
for(int i = head[u]; i; i = e[i].next)
q.push((info){ e[i].to, d + e[i].dis, Dis[e[i].to] });
}
printf("%d\n", ans);
return 0;
}
【洛谷 P2483】 【模板】k短路([SDOI2010]魔法猪学院)(A*)的更多相关文章
- 洛谷 [P2483] [模板] k短路
人生中的第一道黑题... 其实就是k短路模板 #include <iostream> #include <cstdio> #include <cstring> #i ...
- 【模板篇】k短路 SDOI2010 魔法猪学院
题目传送门 吐槽时间 题目分析 代码 题目の传送门 都成了一道模板题了OvO ============================================================= ...
- 洛谷 K短路(魔法猪学院)
A*+迪杰特斯拉... 第十一个点卡爆 不管了 #include<iostream> #include<algorithm> #include<cstring> # ...
- K短路 (A*算法) [Usaco2008 Mar]牛跑步&[Sdoi2010]魔法猪学院
A*属于搜索的一种,启发式搜索,即:每次搜索时加一个估价函数 这个算法可以用来解决K短路问题,常用的估价函数是:已经走过的距离+期望上最短的距离 通常和Dijkstra一起解决K短路 BZOJ1598 ...
- Bzoj 1975: [Sdoi2010]魔法猪学院 dijkstra,堆,A*,K短路
1975: [Sdoi2010]魔法猪学院 Time Limit: 10 Sec Memory Limit: 64 MBSubmit: 1357 Solved: 446[Submit][Statu ...
- [BZOJ1975][SDOI2010]魔法猪学院(k短路,A*)
1975: [Sdoi2010]魔法猪学院 Time Limit: 10 Sec Memory Limit: 64 MBSubmit: 2748 Solved: 883[Submit][Statu ...
- bzoj1975: [Sdoi2010]魔法猪学院【k短路&A*算法】
1975: [Sdoi2010]魔法猪学院 Time Limit: 10 Sec Memory Limit: 64 MBSubmit: 2446 Solved: 770[Submit][Statu ...
- bzoj 1975: [Sdoi2010]魔法猪学院 [k短路]
1975: [Sdoi2010]魔法猪学院 裸题... 被double坑死了 #include <iostream> #include <cstdio> #include &l ...
- [SDOI2010]魔法猪学院(A*,最短路)
[SDOI2010]魔法猪学院(luogu) Description 题目描述 iPig在假期来到了传说中的魔法猪学院,开始为期两个月的魔法猪训练.经过了一周理论知识和一周基本魔法的学习之后,iPig ...
- P2483 [SDOI2010]魔法猪学院
P2483 [SDOI2010]魔法猪学院 摘要 --> 题目描述 iPig在假期来到了传说中的魔法猪学院,开始为期两个月的魔法猪训练.经过了一周理论知识和一周基本魔法的学习之后,iPig对猪世 ...
随机推荐
- 因在缓存对象中增加字段,而导致Redis中取出缓存转化成Java对象时出现反序列化失败的问题
背景描述 因为业务需求的需要,我们需要在原来项目中的一个DTO类中新增两个字段(我们项目使用的是dubbo架构,这个DTO在A项目/服务的domain包中,会被其他的项目如B.C.D引用到).但是这个 ...
- @DateTimeFormat 和 @JsonFormat 注解
1. 准备 定义一个pojo,它有一个 java.util.Date 类型的属性 date. import java.util.Date; public class DateVo { private ...
- 刷题记录:[DDCTF 2019]homebrew event loop
目录 刷题记录:[DDCTF 2019]homebrew event loop 知识点 1.逻辑漏洞 2.flask session解密 总结 刷题记录:[DDCTF 2019]homebrew ev ...
- 第06组 Beta冲刺(2/5)
队名:拾光组 组长博客链接 作业博客链接 团队项目情况 燃尽图(组内共享) 组长:宋奕 过去两天完成了哪些任务 维护后端代码 学习后端架构 GitHub签入记录 接下来的计划 维护后端代码,跟进组员完 ...
- MySQL事务部分回滚-回滚到指定保存点
我们可以在mysql事务处理过程中定义保存点(SAVEPOINT),然后回滚到指定的保存点前的状态. 定义保存点,以及回滚到指定保存点前状态的语法如下. 定义保存点---SAVEPOINT 保存点名; ...
- IIS 7中添加FTP站点并设置指定用户访问
1. 开启 FTP 和 IIS 服务功能: 2. 添加新用户: 打开计算机管理界面: 展开“本地用户与组”: 邮件点击“用户”->点击“创建新用户”: 在创建新用户对话框输入用户 ...
- Spark2.x(五十九):yarn-cluster模式提交Spark任务,如何关闭client进程?
问题: 最近现场反馈采用yarn-cluster方式提交spark application后,在提交节点机上依然会存在一个yarn的client进程不关闭,又由于spark application都是 ...
- odoo开发笔记--日期or时间字段给定默认值
开发中经常有这样的场景,需要给某个日期或者时间的字段默认值: 例如: 日期,默认今天 时间,默认当前时间 可以在odoo模型定义中进行设置, 如下样例提供参考: test_data = fields. ...
- Oracle系列五 多表查询
笛卡尔集笛卡尔集会在下面条件下产生: 省略连接条件 连接条件无效 所有表中的所有行互相连接 为了避免笛卡尔集, 可以在 WHERE 加入有效的连接条件. Oracle 连接 使用连接在多个表中查询数据 ...
- openresty开发系列31--openresty执行流程
openresty开发系列31--openresty执行流程 我们先看个例子 location /test { set $a 32; echo $a; set $a 56; e ...