欢迎访问~原文出处——博客园-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短路的更多相关文章

  1. [BZOJ1975][SDOI2010]魔法猪学院(k短路,A*)

    1975: [Sdoi2010]魔法猪学院 Time Limit: 10 Sec  Memory Limit: 64 MBSubmit: 2748  Solved: 883[Submit][Statu ...

  2. bzoj 1975: [Sdoi2010]魔法猪学院 [k短路]

    1975: [Sdoi2010]魔法猪学院 裸题... 被double坑死了 #include <iostream> #include <cstdio> #include &l ...

  3. BZOJ 1975: [Sdoi2010]魔法猪学院——K短路,A*

    传送门 http://www.lydsy.com/JudgeOnline/problem.php?id=1975 题意&简要做法 一张有向图,求出最多的互不相同的路径,满足路径长度之和\(\l ...

  4. bzoj1975: [Sdoi2010]魔法猪学院【k短路&A*算法】

    1975: [Sdoi2010]魔法猪学院 Time Limit: 10 Sec  Memory Limit: 64 MBSubmit: 2446  Solved: 770[Submit][Statu ...

  5. BZOJ-1975 魔法猪学院 K短路 (A*+SPFA)

    1975: [Sdoi2010]魔法猪学院 Time Limit: 10 Sec Memory Limit: 64 MB Submit: 1323 Solved: 433 [Submit][Statu ...

  6. 【k短路&A*算法】BZOJ1975: [Sdoi2010]魔法猪学院

    Description 找出1~k短路的长度.   Solution k短路的求解要用到A*算法 A*算法的启发式函数f(n)=g(n)+h(n) g(n)是状态空间中搜索到n所花的实际代价 h(n) ...

  7. BZOJ1975 SDOI2010魔法猪学院(启发式搜索+最短路+堆)

    对反图跑最短路求出每个点到终点的最短路径,令其为估价函数大力A*,第k次到达某个点即是找到了到达该点的非严格第k短路,因为估价函数总是不大于实际值.bzoj可能需要手写堆.正解是可持久化可并堆,至今是 ...

  8. BZOJ1975 [Sdoi2010]魔法猪学院

    本文版权归ljh2000和博客园共有,欢迎转载,但须保留此声明,并给出原文链接,谢谢合作. 本文作者:ljh2000 作者博客:http://www.cnblogs.com/ljh2000-jump/ ...

  9. BZOJ1975[Sdoi2010]魔法猪学院——可持久化可并堆+最短路树

    题目描述 iPig在假期来到了传说中的魔法猪学院,开始为期两个月的魔法猪训练.经过了一周理论知识和一周基本魔法的学习之后,iPig对猪世界的世界本原有了很多的了解:众所周知,世界是由元素构成的:元素与 ...

随机推荐

  1. 无备份mysql删除表后恢复

    mysql从5.6.17开始自动设置innodb_file_per_table为on,每个表设置单独表空间,数据不是集中存放在ibdata1里.下面测试下无备份后drop表后的恢复. 前奏生成数据字典 ...

  2. Laravel 5.2服务----用户验证Auth相关问题

    关于laravel的auth()用户认证这一块,面前我也是,有用到,有碰到什么问题我就记录下来. 手动认证用户 <?php namespace App\Http\Controllers; use ...

  3. 【原创】Linux基础之Shell脚本常用命令

    #!/bin/sh 1 取脚本参数 $# 参数个数$0 当前脚本名$1 第1个参数$n 第n个参数$* 所有参数$@ 所有参数$? 上个命令的状态$$ 当前pid 2 日期 $ dateWed Mar ...

  4. Android调试adb devices找不到设备【转】

    adb驱动已经安装成功,但是adb devices却无法找到设备,USB大容量存储也是正常: 以前如果出现此种情况,我能想到的原因如下: 1.杀毒软件问题(关闭MacAfee) 2.驱动安装有误,重新 ...

  5. [转] 为什么说 Java 程序员必须掌握 Spring Boot ?

    Spring Boot 2.0 的推出又激起了一阵学习 Spring Boot 热,那么, Spring Boot 诞生的背景是什么?Spring 企业又是基于什么样的考虑创建 Spring Boot ...

  6. 对象的宽度、top位置,x坐标属性

    DOM对象   DOM对象属性 对应css 说明 读/写 width   obj.clientWidth=20 1. 内联样式 <p style="width:20px"&g ...

  7. Python基础之多态与多态性

    切记:不要将多态与多态性这二者混为一谈,只要分开,就会很明朗了. 一.多态 多态指的是一类事物有多种形态,(一个抽象类有多个子类,因而多态的概念依赖于继承). 比如:动物分为人类.狗类.猪类(在定义角 ...

  8. Django将默认的SQLite更换为MySQL

    1.注释默认的SQLite3配置: blogproject/settings.py ''' DATABASES = { 'default': { 'ENGINE': 'django.db.backen ...

  9. vue指令问题

    挂载点:最外层标签就是vue实例的挂载点,即id或者类对应的 dom节点 模板:指挂载点内部的内容,在实例里使用template标签来构 建 h1标签放在body里面不使用 “template”是一样 ...

  10. AI-响应式、分页器

    响应式 如果在setting配置下列,当只有BrowsableAPIRenderer时,只会返回浏览器页面:当配置成JSONRenderer,会返回json数据 REST_FRAMEWORK={ 'D ...