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对猪世界的世界本原有了很多的了解:众所周知,世界是由元素构成的:元素与 ...
随机推荐
- 二、消息队列之如何在C#中使用RabbitMQ
1.什么是RabbitMQ.详见 http://www.rabbitmq.com/. 作用就是提高系统的并发性,将一些不需要及时响应客户端且占用较多资源的操作,放入队列,再由另外一个线程,去异步处理这 ...
- Windows 下搭建 SVN服务器及使用
目录 一 .安装Visual SVN 二.配置SVN 三.安装TortoiseSVN 四.上传项目到远程仓库 五.从远程仓库下载项目 六.检出项目 七.版本回退 参考链接 http://blog.cs ...
- JS读取.properties文件的方法
假设有JavaScript文件叫做:readproperties.js,这个文件需要读取config.properties这个配置文件,步骤如下: 1. 下载插件jquery.i18n.proper ...
- 洛谷P3676 小清新数据结构题 [动态点分治]
传送门 思路 这思路好妙啊! 首先很多人都会想到推式子之后树链剖分+线段树,但这样不够优美,不喜欢. 脑洞大开想到这样一个式子: \[ \sum_{x} sum_x(All-sum_x) \] 其中\ ...
- AES对数据进行加密与解密
AES对数据进行加密与解密随着对称密码的发展,DES数据加密标准算法由于密钥长度较小(56位),已经不适应当今分布式开放网络对数据加密安全性的要求,因此1997年NIST公开征集新的数据加密标准,即A ...
- Confluence 6 升级自定义的站点和空间获得你的自定义布局
我们建议你在对站点进行布局修改的时候,你需要为你修改的 Confluence 站点或空间布局保留所有的修改记录. 如果没有的话,你应该可以通过下面的办法找到你的自定义修改.这个方法将会把你对全部网站和 ...
- Confluence 6 自定义站点和空间布局
你可以通过编辑布局文件来修改 Confluence 的外观和感觉(也可以被称为装饰).编辑这些文件将会允许你对整个 Confluence 站点的外观和感觉进行修改或者仅仅是一个独立的空间. 当你对一个 ...
- 修改MongoDB密码
修改MongoDB密码 禁用管理员(root)密码 1.找到配置文件mongod.conf,并进入 vim /etc/mongod.conf 2.禁用管理员(root)密码 找到: security: ...
- vue 在.vue文件里监听路由
监听路由 watch $route vue项目中的App.vue 文件 <template> <div id="app"> <!--includ ...
- 从认识面向对象到构造函数的标准写法(构造函数的继承、多态、ECMA6中新代替语法class) - 下
笔记一个包含:认识面向对象.构造函数的封装.继承.多态.ECMA6中新代替语法class 下:包括构造函数的继承.多态.ECMA6中新代替语法class 构造函数的继承 从父一级延续下来的属性和功能( ...