正题

题目链接: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∏n​j=1∏n​(1−ai,j​)∗x−>y∏​1−ai,j​ai,j​​
所以我们先计算出所有的1−ai,j1-a_{i,j}1−ai,j​的乘积,然后再将边权变为ai,j1−ai,j\frac{a_{i,j}}{1-a_{i,j}}1−ai,j​ai,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]重建【矩阵树定理,数学期望】相关推荐

  1. BZOJ3534:[SDOI2014]重建(矩阵树定理)

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

  2. 矩阵树定理2020HDU多校第6场j-Expectation[位运算+期望]

    矩阵树定理 用于求解图上面生成树的个数,生成树的个数等于基尔霍夫矩阵的任何一个N-1阶主子式的行列式的绝对值 矩阵树模板 struct Matrix_Tree {ll a[N][N];Matrix_T ...

  3. 图论数学:矩阵树定理

    运用矩阵树定理进行生成树计数 给定一个n个点m条边的无向图,问生成树有多少种可能 直接套用矩阵树定理计算即可 矩阵树定理的描述如下: 首先读入无向图的邻接矩阵,u-v G[u][v]++ G[v][u ...

  4. 【学习笔记】矩阵树定理(Matrix-Tree)

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 目录 一.矩阵树定理 二.常用定理 三.例题 1. Luogu P6178 [模板]Matrix-Tr ...

  5. 最小生成树、矩阵树定理、Prufer序列总结

    Kruskal算法 按边权排序,从小到大合并不在同一集合两点即可 Prim算法 每次加入一个到当前已选点集最近的点 P2619 [国家集训队]Tree I 考虑二分,每次给白边加上一个mid,通过这种 ...

  6. HDU多校6 - 6836 Expectation(矩阵树定理+高斯消元求行列式)

    题目链接:点击查看 题目大意:给出一张由 n 个点和 m 条边组成的无向图,对于任意一个生成树,其权值为 n - 1 条边的边权进行二进制的 and 运算,现在需要在图中任意选择一个生成树,问期望权值 ...

  7. 学习小记-----行列式矩阵树定理Kirchhoff's theorem

    为什么我的标题要加上Kirchhoff's theorem呢,是因为之前我查这个定理是用这个英文在谷歌上查的,然后,,,,我看了20多分钟的英文维基百科,然后爬墙去做别的题目了QAQ 行列式 前置知识 ...

  8. 行列式入门与矩阵树定理完整证明

    文章目录 前置技能 行列式 定义 性质 拉普拉斯展开 线性性 可乘性 可加性 不重性 可倍加性 转置不变性 可交换性 行可交换性 列可交换性 优化行列式的计算 矩阵树定理 前置定义 一些引理 转置引理 ...

  9. Luogu P4336 [SHOI2016]黑暗前的幻想乡(容斥,矩阵树定理,子集反演)

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 Luogu P4336 [SHOI2016]黑暗前的幻想乡(容斥,矩阵树定理) Problem n≤1 ...

最新文章

  1. 【读书笔记】iOS-网络-解析响应负载
  2. ASP.NET MVC 的一个配置节点
  3. linux执行windows创建的脚本,如何在Windows 10上创建和运行Bash Shell脚本 | MOS86
  4. 信道效率以及信道的吞吐率
  5. Optional的巧用
  6. windows 运行库与dll文件
  7. 复杂材料棱柱体单站RCS
  8. Linux基础知识(5)-压缩与关机命令
  9. windows WTS 服务与桌面交互
  10. 谈谈机器学习(Machine Learning)大牛
  11. 创业者的诗,远方和功不唐捐
  12. 极米Z6X Pro怎么样?极米Z6X Pro亮度如何?极米Z6X Pro值得入手吗?
  13. 计算智能——粒子群优化算法实验
  14. ajax瀑布流插件,jQuery瀑布流无限加载插件:jquery.falless.js
  15. 使用MATLAB实现对信号的EMD分解
  16. c语言统计字母字符数字字符个数,C语言统计字符个数代码分享
  17. 国内链改思路是什么?
  18. Ethercat-IghMaster 1.5.2调试笔记
  19. 迅捷CAD编辑器怎么打开dwg文件
  20. 一千个 Python 库打包,这就是一篇库的字典,哪里需要查哪里!

热门文章

  1. linux 消息队列_Linux进程间通信第六讲 标准IPC之消息队列
  2. 最近有粉丝向我请教Java泛型,于是重温了一下,希望学弟面试顺利
  3. php的old函数,laravel单元测试之phpUnit中old()函数报错解决
  4. 78. 子集022(回溯法)
  5. prim算法和kruskal算法(C语言)
  6. [JavaWeb-JavaScript]JavaScript特殊语法
  7. [JavaWeb-JavaScript]JavaScript概念与功能
  8. [JavaWeb-HTML]HTML标签_文本标签_练习
  9. C++ 带默认参数值的函数
  10. [Java基础]线程安全的类