bzoj1975: [Sdoi2010]魔法猪学院【k短路&A*算法】
1975: [Sdoi2010]魔法猪学院
Time Limit: 10 Sec Memory Limit: 64 MB
Submit: 2446 Solved: 770
[Submit][Status][Discuss]
Description
Input
Output
Sample Input
1 2 1.5
2 1 1.5
1 3 3
2 3 1.5
3 4 1.5
1 4 1.5
Sample Output
HINT
样例解释
有意义的转换方式共4种:
1->4,消耗能量 1.5
1->2->1->4,消耗能量 4.5
1->3->4,消耗能量 4.5
1->2->3->4,消耗能量 4.5
显然最多只能完成其中的3种转换方式(选第一种方式,后三种方式仍选两个),即最多可以转换3份样本。
如果将 E=14.9 改为 E=15,则可以完成以上全部方式,答案变为 4。
数据规模
占总分不小于 10% 的数据满足 N <= 6,M<=15。
占总分不小于 20% 的数据满足 N <= 100,M<=300,E<=100且E和所有的ei均为整数(可以直接作为整型数字读入)。
所有数据满足 2 <= N <= 5000,1 <= M <= 200000,1<=E<=107,1<=ei<=E,E和所有的ei为实数。
Source
#include<cstdio>
#include<cmath>
#include<algorithm>
#include<cstring>
#include<iostream>
#include<queue>
#define N 5007
#define M 200007
#define inf 100000007
using namespace std; int n,m,S,T,ans;double e;
int x[M],y[M],q[N];double z[M];
int cnt,head[N],next[M],rea[M];double val[M];
double dis[N];bool ins[N];
struct fzy
{
int whe;
double g;
};
bool operator<(fzy x,fzy y)
{
return x.g+dis[x.whe]>y.g+dis[y.whe];
}
priority_queue<fzy>qh; void add(int u,int v,double fee)
{
next[++cnt]=head[u],head[u]=cnt;
rea[cnt]=v,val[cnt]=fee;
}
void Spfa_init()
{
for (int i=;i<=n;i++)
dis[i]=inf,ins[i]=;
int st=,ed=;
q[]=T,ins[T]=,dis[T]=;
while(st!=ed)
{
st=st%n+;
int u=q[st];
for (int i=head[u];i!=-;i=next[i])
{
int v=rea[i];double fee=val[i];
if (dis[v]>dis[u]+fee)
{
dis[v]=dis[u]+fee;
if(!ins[v])
{
ins[v]=;
ed=ed%n+;
q[ed]=v;
}
}
}
ins[u]=;
}
}
void Solve()
{
qh.push((fzy){S,});
while(!qh.empty())
{
fzy now=qh.top();qh.pop();
int u=now.whe;double fee=now.g;
if (u==T)
{
e-=fee;
if (e<) return;
ans++;
}
else
{
if (fee+dis[u]>e) continue;
for (int i=head[u];i!=-;i=next[i])
qh.push((fzy){rea[i],fee+val[i]});
}
}
}
int main()
{
cnt=;
memset(head,-,sizeof(head));
scanf("%d%d%lf",&n,&m,&e);
for (int i=;i<=m;i++)
{
scanf("%d%d%lf",&x[i],&y[i],&z[i]);
add(y[i],x[i],z[i]);
}
S=,T=n;
Spfa_init();
cnt=;
memset(head,-,sizeof(head));
for (int i=;i<=m;i++) add(x[i],y[i],z[i]);
Solve();
printf("%d\n",ans);
}
bzoj1975: [Sdoi2010]魔法猪学院【k短路&A*算法】的更多相关文章
- [BZOJ1975][SDOI2010]魔法猪学院(k短路,A*)
1975: [Sdoi2010]魔法猪学院 Time Limit: 10 Sec Memory Limit: 64 MBSubmit: 2748 Solved: 883[Submit][Statu ...
- BZOJ1975 [Sdoi2010]魔法猪学院 k短路
欢迎访问~原文出处——博客园-zhouzhendong 去博客园看该题解 题目传送门 - BZOJ1975 题意概括 给出一个无向图,让你走不同的路径,从1到n,路径长度之和不超过E,求最大路径条数. ...
- 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 ...
- 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对猪世界的世界本原有了很多的了解:众所周知,世界是由元素构成的:元素与 ...
随机推荐
- COGS 1710. [POJ2406]字符串的幂
★☆ 输入文件:powerstrings.in 输出文件:powerstrings.out 简单对比时间限制:3 s 内存限制:256 MB [题目描述] 对于给定的两个字符串a,b, ...
- 在Ubuntu16.04安装YouCompleteMe
作为从事了4年多嵌入式Linux工作的软件工程师,最近决定完全在ubuntu上工作,使用vim进行代码的阅读和编辑,然后尝试去安装vim相关的各种插件.从来没用过代码补全的我,在网上找到了插件omni ...
- 你是猴子请来的逗比么!IT跳槽大事件
3月招聘大战早已硝烟四起,互联网职场摇身一变成了跳蚤市场,猎头们告诉跳蚤们,跳不跳不是不问题,往哪儿跳才是重点,跳对了高薪期权都如过眼云烟.不过小编不得不说,劳资最痛恨那些跳槽的人啦!就因为加班 ...
- Vue v-if与v-show的区别
用了 viewjs 预览图片的时候 发现 用着两个 还是有区别的, 相同点==== v-if与v-show都可以动态控制dom元素显示隐藏 不同点 = ====v-if显示隐藏是将dom元素整个添加 ...
- 并查集+思维——The Door Problem
一.问题描述(题目链接) 有n个门和m个开关,每个开关可以控制任意多的门,每个门严格的只有两个开关控制,问能否通过操作某些开关使得所有门都打开.(给出门的初始状态). 二.问题分析 大部分开关问题首先 ...
- Codeforces Round #277.5 (Div. 2)-C. Given Length and Sum of Digits...
http://codeforces.com/problemset/problem/489/C C. Given Length and Sum of Digits... time limit per t ...
- C02 信息存储与运算
目录 计算机内存 常量和变量 数据类型 运算符 计算机内存管理 计算机内存 信息存储概述 使用程序进行开发时,需要存储各种信息,这时候就需要用到变量.由于信息类型不同,变量的类型也因此不尽相同. 同时 ...
- vs编译obj给delphi用
Cl /O2 /c bjhash.cpp 记得cl x32 和cl x64的区别
- easyui树节点拖拽排序的存储过程
easyui树的拖拽排序功能 easyui树中有拖拽功能 树结构如下: 一个行政区域对应一个单位,一个单位对应多个部门,每个部门下有相关人员,功能要求: (1)行政区域没有子节点,点击text加载部门 ...
- 阿里短信接口使用(JAVA版)
近期项目需要使用短信接口,对比下选择了阿里的短信接口 以下为开发笔记: maven pom.xml中引入: <dependency> <groupId>com.aliyun&l ...