【BZOJ】1975 [Sdoi2010]魔法猪学院(A*)
题目
传送门:QWQ
分析
k短路,Astar。估价函数是终点向外跑的最短路。
显然不是正解qwq。
代码
// By noble_
// Astar algorithm // #include <bits/stdc++.h>
#include <cstdio>
#include <algorithm>
#include <cstring>
#include <queue>
#include <vector>
using namespace std; const int maxn = ;
double h[maxn];
int n,m,s,t; struct Edge{ int u,v; double dis; };
struct Node{
int x;double dis,g;
bool operator < (const Node& a) const{ return dis>a.dis; }
// Node(int xx,double d){x=xx;dis=d;}
};
priority_queue<Node> que;
struct QwQ{
vector<Edge> edges;
vector<int> G[maxn];
int vis[maxn];
//传边反着穿
void Addedge(int u,int v,double dis) {
edges.push_back((Edge){u,v,dis});
G[u].push_back(edges.size()-);
}
void dijkstra() {
while(!que.empty()) que.pop();
memset(vis,,sizeof(vis));
for(int i=;i<=n;i++) h[i]=1e8;
que.push((Node){t,,}); h[t]=;
while(!que.empty()) {
Node x=que.top(); que.pop();
if(vis[x.x]) continue;
// printf("======== %d %f\n",x.x,x.dis);
vis[x.x]=;
for(int i=;i<G[x.x].size();i++) {
Edge& e=edges[G[x.x][i]];
// printf("=--==-=-=- %d %f\n",e.v,h[e.v]);
if(h[e.v] >= h[x.x] + e.dis) {
// printf("===== %d -> %d\n",x.x,e.v);
h[e.v] = h[x.x] + e.dis;
que.push((Node){e.v,h[e.v],});
}
}
}
// printf("--- %d %d\n",(int)h[1],(int)h[2]);
}
}qwq; vector<Edge> edges;
vector<int> G[maxn];
int reach[maxn], k, ans=;
double p, sum=;
void Addedge(int u,int v,double dis) {
edges.push_back((Edge){u,v,dis});
G[u].push_back(edges.size()-);
}
void Astar() {
while(!que.empty()) que.pop();
// if(h[s] >= 1e8) return -1;
memset(reach,,sizeof(reach));
// priority_queue<Node> que;
que.push((Node){s,h[s],});
while(!que.empty()) {
Node x=que.top(); que.pop();
// printf("---- %d %f\n",x.x,x.dis);
reach[x.x]++;
if(reach[x.x]>k)continue;
if(x.x==t) {
if(sum+x.g <= p) sum+=x.g,ans++;
else break;
}
for(int i=;i<G[x.x].size();i++) {
Edge e=edges[G[x.x][i]];
// printf("======= %d %f %f\n",e.v,h[e.v]+x.dis+e.dis,h[e.u]);
que.push((Node){e.v,h[e.v] + x.g + e.dis, x.g+e.dis});
}
}
// return -1;
} int main() {
scanf("%d%d%lf",&n,&m,&p); for(int i=;i<m;i++) {
int a,b;double c;
scanf("%d%d%lf",&a,&b,&c);
qwq.Addedge(b,a,c);
Addedge(a,b,c);
}
// scanf("%d%d%d",&s,&t,&k);
// if(s==t) k++;
s=; t=n;
qwq.dijkstra(); k=int(p/h[]);
Astar();
printf("%d\n",ans);
}
/*
4 6 15
1 2 1.5
2 1 1.5
1 3 3
2 3 1.5
3 4 1.5
1 4 1.5 */
【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 ...
- bzoj 1975 [Sdoi2010]魔法猪学院
1975: [Sdoi2010]魔法猪学院 Time Limit: 10 Sec Memory Limit: 64 MBSubmit: 1758 Solved: 557[Submit][Statu ...
- 洛谷 P2483 BZOJ 1975 [SDOI2010]魔法猪学院
题目描述 iPig在假期来到了传说中的魔法猪学院,开始为期两个月的魔法猪训练.经过了一周理论知识和一周基本魔法的学习之后,iPig对猪世界的世界本原有了很多的了解:众所周知,世界是由元素构成的:元素与 ...
- bzoj 1975 [Sdoi2010]魔法猪学院(k短路)
题目描述 iPig在假期来到了传说中的魔法猪学院,开始为期两个月的魔法猪训练.经过了一周理论知识和一周基本魔法的学习之后,iPig对猪世界的世界本原有了很多的了解:众所周知,世界是由元素构成的:元素与 ...
- BZOJ 1975: [Sdoi2010]魔法猪学院——K短路,A*
传送门 http://www.lydsy.com/JudgeOnline/problem.php?id=1975 题意&简要做法 一张有向图,求出最多的互不相同的路径,满足路径长度之和\(\l ...
- BZOJ 1975: [Sdoi2010]魔法猪学院 大水题 第k短路 spfa
https://www.lydsy.com/JudgeOnline/problem.php?id=1975 我好像到现在了第k短路都不会写,mdzz. 先spfa求出最短路,然后扫点存各种前置路径已经 ...
- BZOJ 1975 SDOI2010 魔法猪学院 A*k短路
题目大意:给定一个值E 求起点到终点的最多条路径 使长度之和不超过E k短路的A*算法--每一个点有一个估价函数=g[x]+h[x] 当中g[x]是从源点出发已经走了的长度 h[x]是从这个点到汇点的 ...
- 【BZOJ】1975: [Sdoi2010]魔法猪学院
题意 \(n(2 \le n \le 5000)\)个点,找尽量多的不同\(1\)到\(n\)的路径,每一次的花费就是路径的全值和,要求在费用不超过\(E\)的情况下路径最多. 分析 裸的最段路. 题 ...
随机推荐
- centos7下Redis-Sentinel安装和配置
一.Redis的安装 1.从官网https://redis.io/download下载最新的stable版本(也可以下载unstable版本)redis-4.0.9.tar.gz. 2.上传到Cent ...
- uDig配图与GeoServer添加Style
软件介绍: uDig是一个开源的桌面GIS软件,可以进行shp与栅格数据地图文件的编辑和查看,对OpenGIS标准,关于互联网GIS.网络地图服务器和网络功能服务器有特别的加强.通常和GeoServe ...
- C++ 多线程中使用cout还是printf
在多线程的设计模式下,如果多个线程都使用cout打印信息,那么很容易出现内容交替的现象,例如下图: 代码如下: 如果把cout替换成printf,那么就不会出现这个问题,运行结果如下图: 对应代码如下 ...
- python3 线性同余发生器 ( random 随机数生成器 ) 伪随机数产生周期的一些探究
import random x=[str(random.randint(0, 5)) for i in range(10)] x_str=''.join(x) y=[str(random.randin ...
- ADC复用重映射
- CodeForces - 778C: Peterson Polyglot (启发式合并trie树)
Peterson loves to learn new languages, but his favorite hobby is making new ones. Language is a set ...
- 20145209 2016-2017-2 《Java程序设计》第8周学习总结
20145209 2016-2017-2 <Java程序设计>第8周学习总结 教材学习内容总结 1.java.util.logging包提供了日志功能相关类与接口. 2.使用日志的起点是L ...
- CentOS安装crontab 定时备份文件夹
一. 编写脚本编写一个脚本文件,使脚本可以执行备份命令. 例如,将文件目录 /home/backups/balalala 备份到/home目录下,并压缩.1. 创建脚本命令格式: touch 路径/文 ...
- 转 AngularJS 2.0将面向移动应用并放弃旧浏览器
AngularJS团队表示“AngularJS 2.0是移动应用的框架”.该框架将继续支持桌面,但其主要关注点变成了移动领域.它的目标还包括通过转译器支持EcmaScript 6(因为浏览器还不支持E ...
- Tcp 编程 的时代 已经到来
这是 一个 网友 在 Github 上的 项目 SmartRoute : https://github.com/IKende/SmartRoute ZooKeeper 和 Consul 的 “投票 ...