zoukankan      html  css  js  c++  java
  • BZOJ2306:[CTSC2011]幸福路径(倍增Floyd)

    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 5
    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

    18.0

    HINT

    对于 100%的数据, n ≤ 100, m ≤ 1000, ρ ≤ 1 – 10^-6, w(i) ≤ 100 (i = 1, 2, …, n)。

    Solution

    显然你跑的足够多的话是可以把解跑到需求的精度范围内的……

    设$f[t][i][j]$表示⾛$2^t$步,从$i$⾛到$j$获得的最⼤幸福度。

    $f[t][i][j]=max(f[t-1][i][k]+f[t-1][k][j]*p^{2^{t-1}})$。

    真正写的时候$t$那一维其实并不需要可以滚动数组直接滚掉……

    还有记得注意一下初始化一定要对。

    Code

     1 #include<iostream>
     2 #include<cstring>
     3 #include<cstdio>
     4 #define N (109)
     5 using namespace std;
     6 
     7 int n,m,v0,u,v;
     8 double ans,p,w[N],f[N][N],g[N][N];
     9 
    10 int main()
    11 {
    12     memset(f,0xfe,sizeof(f));
    13     scanf("%d%d",&n,&m);
    14     for (int i=1; i<=n; ++i)
    15         scanf("%lf",&w[i]), f[i][i]=0;
    16     scanf("%d%lf",&v0,&p);
    17     for (int i=1; i<=m; ++i)
    18         scanf("%d%d",&u,&v), f[u][v]=w[v]*p;
    19     while (p>=1e-10)
    20     {
    21         memset(g,0xfe,sizeof(g));
    22         for (int k=1; k<=n; ++k)
    23             for (int i=1; i<=n; ++i)
    24                 for (int j=1; j<=n; ++j)
    25                     g[i][j]=max(g[i][j],f[i][k]+p*f[k][j]);
    26         memcpy(f,g,sizeof(g)); p*=p;
    27     }
    28     for (int i=1; i<=n; ++i)
    29         ans=max(ans,f[v0][i]);
    30     printf("%.1lf
    ",ans+w[v0]);
    31 }
  • 相关阅读:
    MVC WebApi的两种访问方法
    MVC CRUD 的两种方法
    MVC EF 导航属性
    MVC EF两种查询方法
    MVC WebApi
    POJ 1511 Invitation Cards ( 双向单源最短路 || 最小来回花费 )
    POJ 2502 Subway ( 最短路 && 最短路建图 )
    POJ 3660 Cow Contest ( 最短路松弛思想应用 && Floyd求传递闭包 )
    POJ 1502 MPI MaeIstrom ( 裸最短路 || atoi系统函数 )
    POJ 3259 Wormholes ( SPFA判断负环 && 思维 )
  • 原文地址:https://www.cnblogs.com/refun/p/10212883.html
Copyright © 2011-2022 走看看