【BZOJ2306】[Ctsc2011]幸福路径 倍增Floyd
2017-09-03 09:17
399 查看
【BZOJ2306】[Ctsc2011]幸福路径
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
5 510.0 8.0 8.0 8.0 15.0
1
0.5
1 2
2 3
3 4
4 2
4 5
Sample Output
18.0HINT
对于 100%的数据, n ≤ 100, m ≤ 1000, ρ ≤ 1 – 10^-6, w(i) ≤ 100 (i = 1, 2, …, n)。题解:由于体力越来越小,所以在走一定次数之后剩下的部分就可以忽略不计了,我们可以搞出邻接矩阵,然后自乘50次即可。
#include <cstdio> #include <cstring> #include <iostream> using namespace std; double ans; double v[110],bas; int n,m,S; double f[110][110],g[110][110]; int main() { scanf("%d%d",&n,&m); int i,j,k,l,a,b; for(i=1;i<=n;i++) for(j=1;j<=n;j++) f[i][j]=g[i][j]=-99999999; for(i=1;i<=n;i++) scanf("%lf",&v[i]),f[i][i]=0; scanf("%d%lf",&S,&bas); for(i=1;i<=m;i++) scanf("%d%d",&a,&b),f[a][b]=v[b]*bas; for(l=0;l<=50;l++) { for(k=1;k<=n;k++) for(i=1;i<=n;i++) for(j=1;j<=n;j++) g[i][j]=max(g[i][j],f[i][k]+bas*f[k][j]); for(i=1;i<=n;i++) for(j=1;j<=n;j++) f[i][j]=g[i][j],g[i][j]=-99999999; bas=bas*bas; } for(i=1;i<=n;i++) ans=max(ans,v[S]+f[S][i]); printf("%.1lf",ans); return 0; }
相关文章推荐
- 【bzoj2306】[Ctsc2011]幸福路径 倍增Floyd
- BZOJ 2306 Ctsc2011 幸福路径 倍增Floyd
- BZOJ 2306 [Ctsc2011] 幸福路径 [倍增+floyd做法]
- 【BZOJ 2306】 2306: [Ctsc2011]幸福路径 (倍增floyd)
- bzoj 2306: [Ctsc2011]幸福路径 倍增+floyed
- bzoj2306 [Ctsc2011]幸福路径
- BZOJ2306 [Ctsc2011]幸福路径
- BZOJ2306/Ctsc2011 幸福路径
- bzoj 2306: [Ctsc2011]幸福路径
- [bzoj]2306: [Ctsc2011]幸福路径
- 【Ctsc2011】幸福路径
- BZOJ 2306: [Ctsc2011]幸福路径
- BZOJ 2306 [Ctsc2011] 幸福路径 [期望DP做法]
- 2306: [Ctsc2011]幸福路径
- [CTSC2011]幸福路径
- BZOJF2306 [Ctsc2011]幸福路径
- bzoj 2306: [Ctsc2011]幸福路径
- 【bzoj2360】【cstc2011】【幸福路径】【倍增+floyd】
- 【Floyd】【Dilworth定理】【最小路径覆盖】【匈牙利算法】bzoj1143 [CTSC2008]祭祀river
- bzoj 2306 幸福路径 【floyd】【dp】