首页 > 其他分享 >SDOI2014重建-矩阵树定理、概率

SDOI2014重建-矩阵树定理、概率

时间:2024-03-01 18:14:52浏览次数:26  
标签:int 矩阵 定理 det SDOI2014 double prod rep

link:https://www.luogu.com.cn/problem/P3317
给一张无向图,每条边有一定概率连通,问整张图恰好构成一棵 \(n\) 个点的树的概率。输出实数。
\(1<n\leq 50\)


这种问题通常会试着写出来:

\[ans=\sum_{T} (\prod_{e\in T} p_e)(\prod_{e\not\in T} (1-p_e))=\prod_{e\in E} (1-p_e)\sum_T \prod_{e\in T}\frac{p_e}{1-p_e} \]

后面就可以看成是每条边的边权为 \(\frac{p_e}{1-p_e}\) 的图,用矩阵树定理来求(这种对每个生成树求边权积的形式都可以这么做,行列式就是这样算的)

实现的时候需要注意 \(p_e=1\) 的情况,浮点数除0会直接NaN,但是如果给 \(p_e\) 减去一个很小的 \(\epsilon=10^{-8}\) 这样子就可以避免问题。

#include<bits/stdc++.h>
#define rep(i,a,b) for(int i=(a);i<=(b);i++)
using namespace std;
const int N=55;
const double eps=1e-6;
int n;
double p[N][N];
vector<vector<double>> M;
double guass(vector<vector<double>> a,int n){
    double det=1;
    rep(i,1,n){
        int k=i;
        rep(j,i,n)if(fabs(a[j][i])>fabs(a[k][i]))k=j;
        swap(a[i],a[k]);
        if(i!=k)det=-det;
        rep(j,i+1,n){
            double r=a[j][i]/a[i][i];
            rep(k,1,n)a[j][k]=(a[j][k]-a[i][k]*r);
        }
    }
    rep(i,1,n)det=det*a[i][i];
    return det;
}

int main(){
    cin>>n;
    double prod=1;
    rep(i,1,n)rep(j,1,n){
        cin>>p[i][j];
        if(p[i][j]==1)p[i][j]-=eps;
        if(i<j)prod*=1-p[i][j];
        p[i][j]/=(1-p[i][j]);
    }

    M=vector<vector<double>>(n+1,vector<double>(n+1,0));
    rep(i,1,n)rep(j,1,n){
        if(i==j){
            rep(k,1,n)M[i][i]+=p[i][k];
        }else{
            M[i][j]=-p[i][j];
        }
    }
    cout<<fixed<<setprecision(4)<<guass(M,n-1)*prod;
    return 0;
}

标签:int,矩阵,定理,det,SDOI2014,double,prod,rep
From: https://www.cnblogs.com/yoshinow2001/p/18047666

相关文章

  • Halcon——矩阵/Matrix
    1.矩阵创建create_matrix—Createamatrix.创建一个矩阵create_matrix(::Rows,Columns,Value:MatrixID)A.创建一个3*3单位矩阵create_matrix(3,3,'iidentity',MatrixID)B.创建一个值均为7的3*3方阵create_matrix(3,3,7,MatrixID) C.创建一个3*4......
  • 正定矩阵&负定矩阵&三对角矩阵&上三角矩阵&下三角矩阵
    1.三对角矩阵tridiagonalmatrix 2.上三角矩阵  uppertriangularmatrix 3.下三角矩阵 lowertriangularmatrix 4.正定矩阵 positivedefinitematrix 5.负定矩阵negativedefinitematrix ......
  • (数论)裴蜀定理
    裴蜀定理内容:${ax+by=c,x\inZ^*,y\inZ^*}$成立的充要条件是${\gcd(a,b)|c}$。$Z^*$表示正整数集。 设${s=\gcd(a,b)}$,显然${s|a}$,并且${s|b}$又因为${x,y\inZ^*}$所以${s|ax,s|by}$显然要使得之前的式子成立,则必须满足$c$是$a$和$b$的公约数的倍数又因为$x$和$y$是......
  • 统计子矩阵
    一、题目描述P8783[蓝桥杯2022省B]统计子矩阵二、算法简析2.1二维前缀和我们知道,只要确定了矩阵的左上顶点和右下顶点,一个矩阵就被固定了。因此,我们可以遍历这两个顶点,达到遍历所有子矩阵的目的,复杂度会达到\(O(N^2*M^2)\)。确定了子矩阵,就要判断子矩阵的值是否不大于......
  • R语言逻辑回归、决策树、随机森林、神经网络预测患者心脏病数据混淆矩阵可视化
    全文链接:https://tecdat.cn/?p=33760原文出处:拓端数据部落公众号概述:众所周知,心脏疾病是目前全球最主要的死因。开发一个能够预测患者心脏疾病存在的计算系统将显著降低死亡率并大幅降低医疗保健成本。机器学习在全球许多领域中被广泛应用,尤其在医疗行业中越来越受欢迎。机器......
  • 矩阵树定理
    记结论如果有一条\((i,j)\)的边无向图生成树计数设\(D\)为度数矩阵,\(A\)为邻接矩阵。那么令\(L=D-A\)。则生成树为\(L\)去掉任意一行一列的\(Det(L)\)。mat[i][i]++,mat[j][j]++,mat[i][j]--,mat[j][i]--有向图外向树计数设\(D\)为入度矩阵,\(A\)为邻接矩......
  • 矩阵乘法与矩阵快速幂
    矩阵乘法与矩阵快速幂1矩阵乘法1.1定义对于两个矩阵$A,B$,其中$A$大小为$n\timesm$,$B$大小为$m\timesp$,则这两个矩阵可以做乘法,得到的矩阵$C$的大小为$n\timesp$。例如:$$A=\begin{bmatrix}a_{11}&a_{12}&a_{13}\a_{21}&a_{22}&a_{23}\end{bmatrix}......
  • 鞅与停时定理
    好高妙!大致思想是给每个局面构造一个势能函数\(F(a_1,a_2,\ldots,a_n)\),使得\(\sumE(F(a'_1,a'_2,\ldots,a'_n))-E(F(a_1,a_2,\ldots,n))=-1\),其中\(a'\)取遍\(a\)的后继状态。这样我们就能直接用终态的势能函数减去初始态的势能函数计算期望,即答案为\(E(S)......
  • 【计算机网络】物理层重要公式:奈氏准则&香农定理
    奈氏准则&香农定理失真影响失真程度的因素:1.码元传输速率2.信号传输距离3.噪声干扰4.传输媒体质量码间串扰码间串扰指接收端收到的信号波形失去了码元之间清晰界限的现象。信道带宽:最高频-最低频。超过的部分发生码间串扰,小于的部分发生失真?奈氏准则奈氏准则在理想......
  • LoRA 微调和低秩矩阵
    LoRA(Low-RankAdaptation)是一种技术,旨在有效调整大型语言模型,以适应特定任务,而无需重新训练整个模型。在论文《LORA:LOW-RANKADAPTATIONOFLARGELANGUAGEMODELS》(https://arxiv.org/abs/2106.09685)中给出了具体方法:通过对模型中的参数进行低秩更新,来实现对大型预训练语言模......