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对猪世界的世界本原有了很多的了解:众所周知,世界是由元素构成的:元素与 ...
随机推荐
- 连接MongoDB数据库的配置说明
- windows8无脑式双系统安装教程(转)
转:http://blog.csdn.net/poem_qianmo/article/details/7334987 首先去微软官网将ISO文件下载下来,分为32bit跟64bit两个版本,因人而异, ...
- js获取当前日期、前一天、后一天的日期的例子
<script> function addByTransDate(dateParameter, num) { var translateDate = "", dateS ...
- Burpsuite1.7.03网站渗透神器最新破解版
众所周知,Burp Suite是响当当的web应用程序渗透测试集成平台.从应用程序攻击表面的最初映射和分析, 到寻找和利用安全漏洞等过程,所有工具为支持整体测试程序而无缝地在一起工作. 平台中所有工具 ...
- Vue之父子组件的通信
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- Python基础篇 -- 部分练习题
实现一个整数加法计算器(两个数相加): 如:content = input("请输入内容:") 用户输入:5+9或5+ 9或5 + 9(含空白),然后进行分割转换最终进行整数的计算 ...
- EXTJS中文乱码
在<head>中加入 <meta http-equiv="Content-Type" content="text/html; charset=GB231 ...
- shell脚本,编程题练习。
题目是:将 文件file为 b+b+b+b+b+b+b+b 变为 b+b=b+b=b+b=b+b 解答方法如下:
- shell脚本,如何破解字符串对应的md5sum前的RANDOM对应数字?
已知下面的字符串是通过RANDOM随机数变量md5sum|cut-c 1-8截取后的结果,请破解这些字符串对应的md5sum前的RANDOM对应数字?[root@localhost md5]# cat ...
- javase(7)_Objcet类
一.Object源代码 class Object { private static native void registerNatives(); static {registerNatives();} ...