zoukankan      html  css  js  c++  java
  • P3317 [SDOI2014]重建

    思路

    变元矩阵树定理可以统计最小生成树边权积的和,将A矩阵变为边权,D变为与该点相连的边权和,K=D-A,求K的行列式即可
    把式子化成

    [egin{align}&sum_{T}prod_{ein T}p_eprod_{i otin T}(1-p_i)\=&sum_Tprod_{ein T}p_eprod_{i}(1-p_i)prod_{ein T}frac{1}{(1-p_e)}\=&sum_Tprod_{ein T}frac{p_e}{(1-p_e)}prod_i(1-p_i)\=&prod_i(1-p_i)sum_Tprod_{ein T}frac{p_e}{(1-p_e)}end{align} ]

    然后上变元矩阵树定理即可
    注意(p_i)等于1时要让(1-p_i)等于eps

    代码

    #include <cstdio>
    #include <algorithm>
    #include <cstring>
    #include <cmath>
    using namespace std;
    const double eps =1e-5;
    int n;
    double a[100][100],all=1;
    double gauss(void){
        double ans=1.0;
        for(int i=1;i<n;i++){
            for(int j=i+1;j<n;j++){
                int mx=i;
                if(fabs(a[j][i])>fabs(a[mx][i]))
                    mx=j;
                if(mx!=i){
                    for(int k=1;k<n;k++)
                        swap(a[mx][k],a[i][k]);
                    ans*=-1;
                }
            }
            for(int j=i+1;j<n;j++){
                double rate=a[j][i]/a[i][i];
                for(int k=i;k<n;k++)
                    a[j][k]=a[j][k]-a[i][k]*rate;
            }
            ans*=a[i][i];
        }
        return ans;
    }
    int main(){
        scanf("%d",&n);
        for(int i=1;i<=n;i++){
            for(int j=1;j<=n;j++){
                scanf("%lf",&a[i][j]);
            }
        }
        for(int i=1;i<=n;i++){
            for(int j=1;j<=n;j++){
                double mx=a[i][j];
                mx=(1-mx);
                if(fabs(mx)<eps)
                    mx=eps;
                if(i<j)
                    all*=mx;
                a[i][j]/=mx;
            }
        }
        for(int i=1;i<=n;i++){
            for(int j=1;j<=n;j++){
                if(i!=j){
                    a[i][i]+=a[i][j];
                    a[i][j]=-a[i][j];
                }
            }
        }
        printf("%.10lf
    ",gauss()*all);
        return 0;
    }
    
  • 相关阅读:
    ARC109C Large RPS Tournament 机智
    ABC186F Rook on Grid 树状数组
    二分查找
    CF1445D. Divide and Sum 组合数
    APP测试方法分享
    面试常见问题
    接口测试基础知识
    接口测试一
    web端测试
    Jmeter简介
  • 原文地址:https://www.cnblogs.com/dreagonm/p/10508543.html
Copyright © 2011-2022 走看看