• 【bzoj2306】[Ctsc2011]幸福路径 倍增Floyd


    题目描述

    一张n个点的有向图,每个点有一个权值。一开始从点$v_0$出发沿图中的边任意移动,移动到路径上的第$i$个点

    输入

    每一行中两个数之间用一个空格隔开。 
    输入文件第一行包含两个正整数 n,  m,分别表示 G 中顶点的个数和边的条
    数。 
    第二行包含 n个非负实数,依次表示 n个顶点权值 w(1), w(2), …, w(n)。 
    第三行包含一个正整数 v0,表示给定的起点。 
    第四行包含一个实数 ρ,表示给定的小于 1的正常数。 
    接下来 m行,每行两个正整数 x, y,表示<x, y>是G的一条有向边。可能有
    自环,但不会有重边。

    输出

    仅包含一个实数,即 H值的最大可能值,四舍五入到小数点后一位。

    样例输入

    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

    样例输出

    18.0


    题解

    倍增Floyd

    先把点权加到指向这个点的边上,然后设$f[i][j][k]$表示经过$i$条边,从$j$到$k$的最大收益。

    那么状态转移方程显然是一个类似Floyd的东西。

    由于可以在任意一个点停下,所以在每个点处连一个权值为0的自环。

    这个矩阵的无穷次方(Floyd)即为所求。

    由于$p<1$,所以$p$的足够多次方可以近似看作0。因此可以倍增Floyd,让这个矩阵倍增50次,相当于p进行了50次平方操作,接近0,可以达到精度要求。

    最后加上起点统计答案即可。

    时间复杂度$O(50n^3)$

    #include <cstdio>
    #include <cstring>
    #include <algorithm>
    using namespace std;
    double w[110] , f[55][110][110];
    int main()
    {
    	int n , m , s , i , j , k , l , x , y;
    	double p , ans = 0;
    	scanf("%d%d" , &n , &m);
    	for(i = 1 ; i <= n ; i ++ ) scanf("%lf" , &w[i]);
    	scanf("%d%lf" , &s , &p);
    	memset(f , 0xc2 , sizeof(f));
    	for(i = 0 ; i <= 50 ; i ++ )
    		for(j = 1 ; j <= n ; j ++ )
    			f[i][j][j] = 0;
    	for(i = 1 ; i <= m ; i ++ ) scanf("%d%d" , &x , &y) , f[0][x][y] = p * w[y];
    	for(i = 1 ; i <= 50 ; i ++ , p = p * p)
    		for(j = 1 ; j <= n ; j ++ )
    			for(k = 1 ; k <= n ; k ++ )
    				for(l = 1 ; l <= n ; l ++ )
    					f[i][j][k] = max(f[i][j][k] , f[i - 1][j][l] + p * f[i - 1][l][k]);
    	for(i = 1 ; i <= n ; i ++ )
    		ans = max(ans , w[s] + f[50][s][i]);
    	printf("%.1lf
    " , ans);
    	return 0;
    }
    

     

  • 相关阅读:
    淘宝技术这十年(淘宝技术大学校长解密淘宝十年)
    Go Web编程(Go语言性能好、语法简单、开发效率高!)
    辨别虚假流量的十二种方法
    收获,不止Oracle(顶级专家盖国强、冯春培、黄志洪等联袂力荐)
    演说之禅:职场必知的幻灯片秘技(第2版)(全彩)
    篮球词汇(转)
    Xilinx 网站资源导读
    乔布斯2005年在斯坦福毕业典礼的演讲稿
    FPGA中BRAM初始化文件格式的总结_ALTERA/XILINX
    写给还在上班的人(转)
  • 原文地址:https://www.cnblogs.com/GXZlegend/p/7601741.html
Copyright © 2020-2023  润新知