BZOJ1975 [Sdoi2010]魔法猪学院 k短路
欢迎访问~原文出处——博客园-zhouzhendong
去博客园看该题解
题目传送门 - BZOJ1975
题意概括
给出一个无向图,让你走不同的路径,从1到n,路径长度之和不超过E,求最大路径条数。
题解
k短路模板题。
代码
#include <cstring>
#include <cstdio>
#include <algorithm>
#include <cstdlib>
#include <cmath>
using namespace std;
const int N=5005,M=200002;
const double Inf=1e300;
struct Gragh{
int cnt,y[M*2],nxt[M*2],fst[N],vis[N],q[N],n;
double z[M*2],dis[N];
void clear(int n_){
cnt=0,n=n_;
memset(fst,0,sizeof fst);
}
void add(int a,int b,double c){
y[++cnt]=b,z[cnt]=c,nxt[cnt]=fst[a],fst[a]=cnt;
}
void spfa(int st){
int X,Y,head=0,tail=0,qmod=N-3;
for (int i=1;i<=n;i++)
dis[i]=Inf;
memset(vis,0,sizeof vis);
dis[st]=0,vis[q[tail=tail%qmod+1]=st]=1;
while (head!=tail){
vis[X=q[head=head%qmod+1]]=0;
for (int i=fst[X];i;i=nxt[i])
if (dis[X]+z[i]<dis[Y=y[i]]){
dis[Y]=dis[X]+z[i];
if (!vis[Y])
vis[q[tail=tail%qmod+1]=Y]=1;
}
}
}
}yg,g;
const int S=2000000;
int id[S],heap_size;
double now[S];
double h(int x){return g.dis[x];}
double G(int x){return now[x]+h(id[x]);}
void heap_clear(){heap_size=0;}
bool heap_empty(){return heap_size==0;}
bool heap_cmp(int a,int b){return G(a)<G(b);}
void heap_down(){
for (int i=1,j=i<<1;j<=heap_size;i=j,j=i<<1){
j+=j<heap_size&&!heap_cmp(j,j+1);
if (heap_cmp(i,j))
break;
swap(id[i],id[j]),swap(now[i],now[j]);
}
}
void heap_up(){
for (int i=heap_size,j=i>>1;i>1;i=j,j=i>>1)
if (!heap_cmp(j,i))
swap(id[i],id[j]),swap(now[i],now[j]);
else
break;
}
void heap_pop(){
id[1]=id[heap_size];
now[1]=now[heap_size--];
heap_down();
}
void heap_push(int x,double nowdis){
id[++heap_size]=x;
now[heap_size]=nowdis;
heap_up();
}
int n,m;
double E;
int solve(){
int ans=0;
heap_clear();
heap_push(1,0);
while (!heap_empty()){
int x=id[1];
double nowdis=now[1];
heap_pop();
if (x==n){
if (nowdis>E)
return ans;
E-=nowdis;
ans++;
continue;
}
for (int i=yg.fst[x];i;i=yg.nxt[i]){
int y=yg.y[i];
heap_push(y,nowdis+yg.z[i]);
}
}
}
int main(){
scanf("%d%d%lf",&n,&m,&E);
g.clear(n),yg.clear(n);
for (int i=1;i<=m;i++){
int a,b;
double e;
scanf("%d%d%lf",&a,&b,&e);
yg.add(a,b,e);
g.add(b,a,e);
}
g.spfa(n);
printf("%d",solve());
return 0;
}
BZOJ1975 [Sdoi2010]魔法猪学院 k短路的更多相关文章
- [BZOJ1975][SDOI2010]魔法猪学院(k短路,A*)
1975: [Sdoi2010]魔法猪学院 Time Limit: 10 Sec Memory Limit: 64 MBSubmit: 2748 Solved: 883[Submit][Statu ...
- bzoj 1975: [Sdoi2010]魔法猪学院 [k短路]
1975: [Sdoi2010]魔法猪学院 裸题... 被double坑死了 #include <iostream> #include <cstdio> #include &l ...
- BZOJ 1975: [Sdoi2010]魔法猪学院——K短路,A*
传送门 http://www.lydsy.com/JudgeOnline/problem.php?id=1975 题意&简要做法 一张有向图,求出最多的互不相同的路径,满足路径长度之和\(\l ...
- bzoj1975: [Sdoi2010]魔法猪学院【k短路&A*算法】
1975: [Sdoi2010]魔法猪学院 Time Limit: 10 Sec Memory Limit: 64 MBSubmit: 2446 Solved: 770[Submit][Statu ...
- BZOJ-1975 魔法猪学院 K短路 (A*+SPFA)
1975: [Sdoi2010]魔法猪学院 Time Limit: 10 Sec Memory Limit: 64 MB Submit: 1323 Solved: 433 [Submit][Statu ...
- 【k短路&A*算法】BZOJ1975: [Sdoi2010]魔法猪学院
Description 找出1~k短路的长度. Solution k短路的求解要用到A*算法 A*算法的启发式函数f(n)=g(n)+h(n) g(n)是状态空间中搜索到n所花的实际代价 h(n) ...
- BZOJ1975 SDOI2010魔法猪学院(启发式搜索+最短路+堆)
对反图跑最短路求出每个点到终点的最短路径,令其为估价函数大力A*,第k次到达某个点即是找到了到达该点的非严格第k短路,因为估价函数总是不大于实际值.bzoj可能需要手写堆.正解是可持久化可并堆,至今是 ...
- BZOJ1975 [Sdoi2010]魔法猪学院
本文版权归ljh2000和博客园共有,欢迎转载,但须保留此声明,并给出原文链接,谢谢合作. 本文作者:ljh2000 作者博客:http://www.cnblogs.com/ljh2000-jump/ ...
- BZOJ1975[Sdoi2010]魔法猪学院——可持久化可并堆+最短路树
题目描述 iPig在假期来到了传说中的魔法猪学院,开始为期两个月的魔法猪训练.经过了一周理论知识和一周基本魔法的学习之后,iPig对猪世界的世界本原有了很多的了解:众所周知,世界是由元素构成的:元素与 ...
随机推荐
- JMeter实现唯一参数生成不重复时间戳
现象: 使用jmeter做接口压测时,总会遇到压测时,提示不允许重复id或提示订单不允许重复现象,那么如何解决呢? 原料工具 jmeter4.0 本地准备好接口服务 思路: 单个接口,小批量接口,一般 ...
- 程序包管理dpkg、apt-get、服务端openssh-server与客户端Xshell设置及lrzsz安装使用
一.程序包管理器 dpkg.apt-get 1.dpkg 安装:sudo dpkg -i cmatrix_1.2a-5build3_amd64.deb 卸载:sudo dpkg -r cmatrix ...
- Protobuf3 语法指南
目录 [−] 定义一个消息类型 指定字段类型 分配标识号 指定字段规则 添加更多消息类型 添加注释 保留标识符(Reserved) 从.proto文件生成了什么? 标量数值类型 默认值 枚举 使用其他 ...
- Android 各种路径详细说明
存储分类: 内部存储路径, 内部缓存存储路径, 外部存储路径, 外部缓存存储路径 在有些手机上内部划出一个内部的sdcard路径和内部存储路径,当有sdcard时候,就有了六个路径 内部存储空间中的应 ...
- Confluence 6 使用 WebDAV 客户端来对页面进行操作
下面的部分告诉你如何在不同的系统中来设置原生的 WebDAV 客户端,这个客户端通常显示在你操作系统的文件浏览器中,例如,Windows 的 Windows Explorer 或者 Linux 的 K ...
- Java之动手动脑(三)
日期:2018.10.12 星期五 博客期:017 这次留了两个动手动脑作业!我需要一个一个来说!先说第一个吧! Part 1 :随机生成1000个随机数 代码: //以下为 RandomMaker. ...
- npm无反应的问题&npm常用命令
RT: windows安装完nodejs后做了相关环境变量配置后,cmd输入npm命令无反应,就光标一直闪,百度了半天终于找到解决办法 解决方法:C:\Users\Administrator(或你的账 ...
- ATM机模拟系统
实验要求 https://pan.baidu.com/s/1Sq5joWyVsNhY8DYiyI4UmQ 源代码 /*信1705-1 20173458 王嘉梁*/ package atm; impor ...
- yslow V2 准则详细讲解
主要有12条: 1. Make fewer HTTP requests 尽可能少的http请求..我们有141个请求(其中15个JS请求,3个CSS请求,47个CSS background ima ...
- TensorFlow框架(一) 张量、计算图、会话
参考:中国大学MOOC 北京大学 曹健<TensorFlow笔记> 基于TensorFlow的NN:用张量表示数据,用计算图搭建神经网络,用会话执行计算图,优化线上的权重(参数),得到模型 ...