题目大意:(略)
题解:
相对误差……我好方。
考虑答案应该为所有合法答案概率之和。对于一个合法的生成树,其出现概率应为所有选取边的概率出现的积 乘以 所有未选取边不出现概率的积。
即:
$\;\prod_{e\in tree} p_e\prod_{e\notin tree}1-p_e$
$=\prod_{e\in tree}\frac{p_e}{1-p_e}\prod_{e}1-p_e$
然后按照新边权列行列式即可。
代码:
1 #include "bits/stdc++.h" 2 3 using namespace std; 4 5 const double eps=1e-9; 6 7 const int N=100; 8 9 int n;10 double a[N][N];11 12 double det(){13 double res=1;14 for(int i=0;i<=n;++i)15 for(int j=0;j<=n;++j)16 if(i!=j) a[i][i]+=a[i][j],a[i][j]=-a[i][j];17 for(int i=0;ifabs(a[p][i]))p=j;20 if(fabs(a[p][i]) 1.0) a[i][j]-=eps;40 if(i