P3317-[SDOI2014]重建【矩阵树定理,数学期望】
正题
题目链接:https://www.luogu.com.cn/problem/P3317
题目大意
nnn个点若干条边。告诉你每条边出现的概率,求刚好出现一颗生成树的概率是多少。
解题思路
矩阵树定理是计算每个生成树的每条边乘积之和。
我们考虑将答案转换为那个形式,ai,ja_{i,j}ai,j表示i−>ji->ji−>j的边出现的概率,那么对于每棵生成树有答案
∏x−>yai,j∗∏x−/>y(1−ai,j)\prod_{x->y}a_{i,j}*\prod_{x-/>y}(1-a_{i,j})x−>y∏ai,j∗x−/>y∏(1−ai,j)
也就是
∏i=1n∏j=1n(1−ai,j)∗∏x−>yai,j1−ai,j\prod_{i=1}^n\prod_{j=1}^n(1-a_{i,j})*\prod_{x->y}\frac{a_{i,j}}{1-a_{i,j}}i=1∏nj=1∏n(1−ai,j)∗x−>y∏1−ai,jai,j
所以我们先计算出所有的1−ai,j1-a_{i,j}1−ai,j的乘积,然后再将边权变为ai,j1−ai,j\frac{a_{i,j}}{1-a_{i,j}}1−ai,jai,j用矩阵树计算即可。
时间复杂度O(n3)O(n^3)O(n3)
codecodecode
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
using namespace std;
const int N=51;
const double eps=1e-8;
int n;
double a[N][N],ans;
void Gauss(){for(int i=1;i<n;i++){int mx=i;for(int j=i+1;j<n;j++)if(fabs(a[j][i])>fabs(a[mx][i]))mx=j;if(mx!=i)for(int j=1;j<n;j++)swap(a[i][j],a[mx][j]);for(int j=i+1;j<n;j++){double mul=a[j][i]/a[i][i];for(int k=i;k<n;k++)a[j][k]-=a[i][k]*mul;}if(fabs(a[i][i])<eps){ans=0;return;}}for(int i=1;i<n;i++)ans=ans*a[i][i];ans=fabs(ans);
}
int main()
{scanf("%d",&n);ans=1;for(int i=1;i<=n;i++)for(int j=1;j<=n;j++){scanf("%lf",&a[i][j]);if(a[i][j]<eps) a[i][j]=eps;if(1-a[i][j]<eps) a[i][j]=1-eps;if(i<j) ans*=1-a[i][j];a[i][j]=a[i][j]/(1-a[i][j]);}for(int i=1;i<=n;i++){a[i][i]=0;for(int j=1;j<=n;j++)if(i!=j)a[i][i]-=a[i][j];}Gauss();printf("%.10lf",ans);
}
P3317-[SDOI2014]重建【矩阵树定理,数学期望】相关推荐
- BZOJ3534:[SDOI2014]重建(矩阵树定理)
Description T国有N个城市,用若干双向道路连接.一对城市之间至多存在一条道路. 在一次洪水之后,一些道路受损无法通行.虽然已经有人开始调查道路的损毁情况,但直到现在几乎没有消息传回. 幸运 ...
- 矩阵树定理2020HDU多校第6场j-Expectation[位运算+期望]
矩阵树定理 用于求解图上面生成树的个数,生成树的个数等于基尔霍夫矩阵的任何一个N-1阶主子式的行列式的绝对值 矩阵树模板 struct Matrix_Tree {ll a[N][N];Matrix_T ...
- 图论数学:矩阵树定理
运用矩阵树定理进行生成树计数 给定一个n个点m条边的无向图,问生成树有多少种可能 直接套用矩阵树定理计算即可 矩阵树定理的描述如下: 首先读入无向图的邻接矩阵,u-v G[u][v]++ G[v][u ...
- 【学习笔记】矩阵树定理(Matrix-Tree)
整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 目录 一.矩阵树定理 二.常用定理 三.例题 1. Luogu P6178 [模板]Matrix-Tr ...
- 最小生成树、矩阵树定理、Prufer序列总结
Kruskal算法 按边权排序,从小到大合并不在同一集合两点即可 Prim算法 每次加入一个到当前已选点集最近的点 P2619 [国家集训队]Tree I 考虑二分,每次给白边加上一个mid,通过这种 ...
- HDU多校6 - 6836 Expectation(矩阵树定理+高斯消元求行列式)
题目链接:点击查看 题目大意:给出一张由 n 个点和 m 条边组成的无向图,对于任意一个生成树,其权值为 n - 1 条边的边权进行二进制的 and 运算,现在需要在图中任意选择一个生成树,问期望权值 ...
- 学习小记-----行列式矩阵树定理Kirchhoff's theorem
为什么我的标题要加上Kirchhoff's theorem呢,是因为之前我查这个定理是用这个英文在谷歌上查的,然后,,,,我看了20多分钟的英文维基百科,然后爬墙去做别的题目了QAQ 行列式 前置知识 ...
- 行列式入门与矩阵树定理完整证明
文章目录 前置技能 行列式 定义 性质 拉普拉斯展开 线性性 可乘性 可加性 不重性 可倍加性 转置不变性 可交换性 行可交换性 列可交换性 优化行列式的计算 矩阵树定理 前置定义 一些引理 转置引理 ...
- Luogu P4336 [SHOI2016]黑暗前的幻想乡(容斥,矩阵树定理,子集反演)
整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 Luogu P4336 [SHOI2016]黑暗前的幻想乡(容斥,矩阵树定理) Problem n≤1 ...
最新文章
- 【读书笔记】iOS-网络-解析响应负载
- ASP.NET MVC 的一个配置节点
- linux执行windows创建的脚本,如何在Windows 10上创建和运行Bash Shell脚本 | MOS86
- 信道效率以及信道的吞吐率
- Optional的巧用
- windows 运行库与dll文件
- 复杂材料棱柱体单站RCS
- Linux基础知识(5)-压缩与关机命令
- windows WTS 服务与桌面交互
- 谈谈机器学习(Machine Learning)大牛
- 创业者的诗,远方和功不唐捐
- 极米Z6X Pro怎么样?极米Z6X Pro亮度如何?极米Z6X Pro值得入手吗?
- 计算智能——粒子群优化算法实验
- ajax瀑布流插件,jQuery瀑布流无限加载插件:jquery.falless.js
- 使用MATLAB实现对信号的EMD分解
- c语言统计字母字符数字字符个数,C语言统计字符个数代码分享
- 国内链改思路是什么?
- Ethercat-IghMaster 1.5.2调试笔记
- 迅捷CAD编辑器怎么打开dwg文件
- 一千个 Python 库打包,这就是一篇库的字典,哪里需要查哪里!
热门文章
- linux 消息队列_Linux进程间通信第六讲 标准IPC之消息队列
- 最近有粉丝向我请教Java泛型,于是重温了一下,希望学弟面试顺利
- php的old函数,laravel单元测试之phpUnit中old()函数报错解决
- 78. 子集022(回溯法)
- prim算法和kruskal算法(C语言)
- [JavaWeb-JavaScript]JavaScript特殊语法
- [JavaWeb-JavaScript]JavaScript概念与功能
- [JavaWeb-HTML]HTML标签_文本标签_练习
- C++ 带默认参数值的函数
- [Java基础]线程安全的类