BZOJ 2306 [Ctsc2011] 幸福路径 [倍增+floyd做法]
来源:互联网 发布:常见文本文件格式知乎 编辑:程序博客网 时间:2024/06/05 05:40
Description
有向图 G有n个顶点 1, 2, …, n,点i 的权值为 w(i)。现在有一只蚂蚁,从
给定的起点 v0出发,沿着图 G 的边爬行。开始时,它的体力为 1。每爬过一条
边,它的体力都会下降为原来的 ρ 倍,其中ρ 是一个给定的小于1的正常数。而
蚂蚁爬到某个顶点时的幸福度,是它当时的体力与该点权值的乘积。
我们把蚂蚁在爬行路径上幸福度的总和记为 H。很显然,对于不同的爬行路
径,H 的值也可能不同。小 Z 对 H 值的最大可能值很感兴趣,你能帮助他计算
吗?注意,蚂蚁爬行的路径长度可能是无穷的。
Input
每一行中两个数之间用一个空格隔开。
输入文件第一行包含两个正整数 n, m,分别表示 G 中顶点的个数和边的条
数。
第二行包含 n个非负实数,依次表示 n个顶点权值 w(1), w(2), …, w(n)。
第三行包含一个正整数 v0,表示给定的起点。
第四行包含一个实数 ρ,表示给定的小于 1的正常数。
接下来 m行,每行两个正整数 x, y,表示<x, y>是G的一条有向边。可能有
自环,但不会有重边。
Output
仅包含一个实数,即 H值的最大可能值,四舍五入到小数点后一位。
Sample Input
10.0 8.0 8.0 8.0 15.0
1
0.5
1 2
2 3
3 4
4 2
4 5
Sample Output
HINT
对于 100%的数据, n ≤ 100, m ≤ 1000, ρ ≤ 1 – 10^-6
, w(i) ≤ 100 (i = 1, 2, …, n)。
Source
Day1
倍增+floyd~
一种近似算法,多次floyd来DP,使得答案接近正解,要注意的是更新的时候每个位置都要设成极小值,防止错误的更新。DP之前f[i][i]要设为0,防止数自己循环。
用f[i][j][k]表示2^i步,从j走到k的最大值,把i改成滚动的,然后每次floyd即可~
用memset把数组更成最小值赋值为0xc2,以前根本不知道啊~
#include<cstdio>#include<cstring>#include<iostream>using namespace std;int n,m,v0,x,y;double a[101],f[2][101][101],p,z,ans;bool kkz;int main(){scanf("%d%d",&n,&m);for(int i=1;i<=n;i++) scanf("%lf",&a[i]);scanf("%d%lf",&v0,&p);z=p;memset(f[kkz],0xc2,sizeof(f[kkz]));for(int i=1;i<=n;i++) f[kkz][i][i]=0;for(int i=1;i<=m;i++){scanf("%d%d",&x,&y);f[kkz][x][y]=a[y];}for(int i=1;i<=70;i++,p*=p){kkz^=1;memset(f[kkz],0xc2,sizeof(f[kkz]));for(int i=1;i<=n;i++) for(int j=1;j<=n;j++) for(int k=1;k<=n;k++) f[kkz][i][j]=max(f[kkz][i][j],f[kkz^1][i][k]+f[kkz^1][k][j]*p);}for(int i=1;i<=n;i++) ans=max(ans,f[kkz][v0][i]);printf("%.1lf\n",ans*z+a[v0]);return 0;}
- BZOJ 2306 [Ctsc2011] 幸福路径 [倍增+floyd做法]
- BZOJ 2306 Ctsc2011 幸福路径 倍增Floyd
- bzoj 2306: [Ctsc2011]幸福路径 倍增+floyed
- BZOJ 2306 [Ctsc2011] 幸福路径 [期望DP做法]
- BZOJ 2306: [Ctsc2011]幸福路径
- [bzoj]2306: [Ctsc2011]幸福路径
- bzoj 2306: [Ctsc2011]幸福路径
- bzoj 2306: [Ctsc2011]幸福路径
- 2306: [Ctsc2011]幸福路径
- BZOJ2306/Ctsc2011 幸福路径
- BZOJF2306 [Ctsc2011]幸福路径
- bzoj 2306 幸福路径 【floyd】【dp】
- 【bzoj2360】【cstc2011】【幸福路径】【倍增+floyd】
- bzoj 1706 倍增floyd
- BZOJ 2165 大楼 倍增Floyd
- BZOJ 2165 大楼 倍增Floyd
- [倍增 floyd] BZOJ 2165 大楼
- bzoj 2165: 大楼 倍增floyd
- spring框架一之属性值的初始化
- 深入理解JAVA虚拟机(三)内存分配与回收机制
- 标准C++中的string类的用法总结
- PID的快速理解与掌握
- 函数中的数组传递
- BZOJ 2306 [Ctsc2011] 幸福路径 [倍增+floyd做法]
- 机器学习的相关模块安装:pandas,numpy, scipy,scikit_learn(sklearn), matplotlib在winows系统下的安装问题
- swjtu2381(Matrix)
- Java过滤器与SpringMVC拦截器之间的关系与区别
- Hbase<踩过的坑--使用intellij idea调用JavaAPI创建预分区>
- javascript中的标签语句label:statement
- Rocket简介(1)
- Java的数据类型
- BZOJ 4720 [Noip2016]换教室——期望DP