传送门

解题思路

  比较容易看的出来矩阵树定理。然后就怒送一Wa,这个矩阵树定理是不能直接用的。题目要求的其实是这个玩意。

\[ans=\sum\limits_{Tree}( \prod\limits_{e\in Tree}p_e*\prod\limits_{e\notin Tree}(1-p_e))
\]

而矩阵树能求的东西本质上其实是每棵生成树的积的和,说人话就是这个。

\[now=\sum\limits_{Tree}\prod\limits_{e\in Tree}w_e
\]

这个形式跟上面那个很像,但还是有点不一样。我们考虑将上面那个式子化简。根据

\[\prod\limits_{e\notin Tree}(1-p_e)=\frac{\prod\limits_e (1-p_e)}{\prod\limits_{e\in Tree}(1-p_e)}
\]

把这玩意往最上面那个式子里一带,神奇的事情发生了:

\[ans=\prod\limits_e(1-p_e)*\sum\limits_{Tree} \frac{\prod\limits_{e\in Tree}p_e}{\prod\limits_{e\in Tree}(1-p_e)}
\]

前面这个玩意可以直接算出来。后头这个玩意直接上矩阵树,把邻接矩阵的边权改成\(\frac{p_e}{1-p_e}\)就行了。

通过这道题,让我们明白了原来矩阵树里的那个边权是可以自己规定的,算出来的结果为每个生成树的积之和。

#include<iostream>
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<algorithm>
#include<cmath> using namespace std;
const int MAXN = 55;
const double eps = 1e-8; int n;
double ans=1.0,base=1.0,f[MAXN][MAXN]; inline void Matrix_tree(){
double t;int p;
for(int i=1;i<n;i++){
p=i;
for(int j=i+1;j<n;j++)
if(fabs(f[p][i])<fabs(f[j][i])) p=j;
if(p!=i) swap(f[i],f[p]);
for(int j=i+1;j<n;j++){
t=f[j][i]/f[i][i];
for(int k=i;k<n;k++)
f[j][k]-=t*f[i][k];
}
ans*=f[i][i];
}
} int main(){
scanf("%d",&n);
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++){
scanf("%lf",&f[i][j]);if(i==j) continue;
if(f[i][j]>1.0-eps) f[i][j]-=eps;
if(i>j && f[i][j]>eps) base*=(1-f[i][j]);
f[i][j]=f[i][j]/(1-f[i][j]);
}
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)if(i!=j)
f[i][i]+=f[i][j],f[i][j]=-f[i][j];
Matrix_tree();printf("%.10lf",ans*base);
return 0;
}

BZOJ 3534: [Sdoi2014]重建(Matrix Tree)的更多相关文章

  1. bzoj 3534: [Sdoi2014]重建【矩阵树定理】

    啊啊啊无脑背过果然不可取 比如这道题就不会写 参考:https://blog.csdn.net/iamzky/article/details/41317333 #include<iostream ...

  2. [bzoj 3534][Sdoi2014] 重建

    传送门 Description  T国有N个城市,用若干双向道路连接.一对城市之间至多存在一条道路. 在一次洪水之后,一些道路受损无法通行.虽然已经有人开始调查道路的损毁情况,但直到现在几乎没有消息传 ...

  3. 【BZOJ 3534】 3534: [Sdoi2014]重建 (Matrix-Tree Theorem)

    3534: [Sdoi2014]重建 Time Limit: 10 Sec  Memory Limit: 512 MBSec  Special JudgeSubmit: 709  Solved: 32 ...

  4. @总结 - 7@ 生成树计数 —— matrix - tree 定理(矩阵树定理)与 prüfer 序列

    目录 @0 - 参考资料@ @0.5 - 你所需要了解的线性代数知识@ @1 - 矩阵树定理主体@ @证明 part - 1@ @证明 part - 2@ @证明 part - 3@ @证明 part ...

  5. BZOJ.4031.[HEOI2015]小Z的房间(Matrix Tree定理 辗转相除)

    题目链接 辗转相除解行列式的具体实现? 行列式的基本性质. //864kb 64ms //裸的Matrix Tree定理.练习一下用辗转相除解行列式.(因为模数不是质数,所以不能直接乘逆元来高斯消元. ...

  6. bzoj 1016 [JSOI2008]最小生成树计数——matrix tree(相同权值的边为阶段缩点)(码力)

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1016 就是缩点,每次相同权值的边构成的联通块求一下matrix tree.注意gauss里的 ...

  7. 一篇自己都看不懂的Matrix tree总结

    Matrix tree定理用于连通图生成树计数,由于博主太菜看不懂定理证明,所以本篇博客不提供\(Matrix\ tree\)定理的证明内容(反正这个东西背结论就可以了是吧) 理解\(Matrix\ ...

  8. SPOJ.104.Highways([模板]Matrix Tree定理 生成树计数)

    题目链接 \(Description\) 一个国家有1~n座城市,其中一些城市之间可以修建高速公路(无自环和重边). 求有多少种方案,选择修建一些高速公路,组成一个交通网络,使得任意两座城市之间恰好只 ...

  9. P3317 [SDOI2014]重建(Matrix-tree+期望)

    P3317 [SDOI2014]重建 详情看这位神犇的blog 剩下的注释在code里吧....... #include<iostream> #include<cstdio> ...

随机推荐

  1. nginx获取头部信息带下划线,获取不到解决方案

    nginx获取头部信息带下划线,获取不到解决方案 解决方案: 修改配置文件,进行添加信息如下: underscores_in_headers on; 然后进行重新加载: [root@qa-web co ...

  2. Github pages博客搭建与域名绑定

    Github Page github page是由用户编写的托管在github上的静态网页,为了搭建一个个人博客,我们可以租用一个云服务器然后部署我们的博客项目,常见的比如wordpress,像wp这 ...

  3. mysql-一行分隔成多行数据

    mysql将某个字段有分隔符号分隔成多行数据 SELECT a.id, a. NAME, substring_index( substring_index( a.name, ',', b.help_t ...

  4. mac上安装mamp集成环境

    深知mac配置环境是个坑,本人之前用的是xampp因为近期需要mongodb扩展,死活装不明白,索性就换了一个集成环境,在网上找了好多,最后选择了mamp 因为正版的要收费,所以在下载了N个以后终于找 ...

  5. Java——类的成员之五:内部类

    3.6 类的成员之五:内部类 3.6.1 静态内部类 ①静态内部类可以等同看做静态变量. ②内部类重要的作用:可以访问外部类中私有的数据. ③静态内部类可以直接访问外部类的静态数据,无法直接访问成员. ...

  6. PHP FILTER_VALIDATE_FLOAT 过滤器

    定义和用法 FILTER_VALIDATE_FLOAT 过滤器把值作为浮点数来验证. Name: "float" ID-number: 259 实例 <?php $var=1 ...

  7. TCP/IP报文格式

    1.TCP首部格式 1.1 格式各字段含义 源端口号( 16 位):它(连同源主机 IP 地址)标识源主机的一个应用进程. 目的端口号( 16 位):它(连同目的主机 IP 地址)标识目的主机的一个应 ...

  8. STM32库中自定义的数据类型

    在头文件 <stdint.h> 中 1 /* exact-width signed integer types */ typedef signed char int8_t; typedef ...

  9. Spellchecker inspection helps locate typos and misspelling in your code, comments and literals, and fix them in one click

    Pycharm设置 Pycharm总是很多的拼写检查波拉线 Spellchecker inspection helps locate typos and misspelling in your cod ...

  10. 为了避免hexo博客换了电脑应该提前做的准备。

    个人博客:https://mmmmmm.me 源码:https://github.com/dataiyangu/dataiyangu.github.io 本文转自:https://www.jiansh ...