【BZOJ3534】[SDOI2014] 重建(矩阵树定理)
大致题意: 给你一张图,每条边有一定存在概率。求存在的图刚好为一棵树的概率。
矩阵树定理是什么
如果您不会矩阵树定理,可以看看蒟蒻的这篇博客:初学矩阵树定理。
矩阵树定理的应用
此题中,直接根据\(p_{i,j}\)来套矩阵树定理显然是不可以的。
考虑我们把每个\(p_{i,j}\)变成\(\frac{p_{i,j}}{1-p_{i,j}}\),套用矩阵树定理,然后最后将结果乘上\(\prod_{i=1}^n\prod_{j=i+1}^n(1-p_{i,j})\),就是答案了。
此时度数矩阵和邻接矩阵中的值都应该用\(\frac p{1-p}\)去替换原先的\(1\)。
代码
#include<bits/stdc++.h>
#define Tp template<typename Ty>
#define Ts template<typename Ty,typename... Ar>
#define Reg register
#define RI Reg int
#define Con const
#define CI Con int&
#define I inline
#define W while
#define N 50
#define DB double
#define eps 1e-8
using namespace std;
int n;double a[N+5][N+5];
class MatrixTreeSolver
{
private:
class Mat//矩阵
{
private:
int n;DB v[N+5][N+5];
I bool FindLine(CI x)
{
for(RI i=x+1;i<=n;++i)
{
if(fabs(v[i][x])<eps) continue;
for(RI j=x;j<=n;++j) swap(v[x][j],v[i][j]);return true;
}return false;
}
public:
I Mat(CI x=0):n(x){memset(v,0,sizeof(v));}
I DB *operator [] (CI x) {return v[x];}
I DB Det()//行列式
{
RI i,j,k,op=1;DB t,res=1;for(i=1;i<=n;++i)
{
if(fabs(v[i][i])<eps&&(op*=-1,!FindLine(i))) return 0;res*=v[i][i];
for(j=i+1;j<=n;++j) for(t=v[j][i]/v[i][i],k=i;k<=n;++k) v[j][k]-=t*v[i][k];
}return op*res;
}
}S;
public:
I void Solve()
{
RI i,j;DB t,res=1;S=Mat(n-1);
for(i=1;i<=n;++i) for(j=i+1;j<=n;++j)
(t=1-a[i][j])<eps&&(t=eps),a[i][j]/=t,res*=t,//求出矩阵中这一位的值
S[i][i]+=a[i][j],S[j][j]+=a[i][j],S[i][j]-=a[i][j],S[j][i]-=a[i][j];//求出度数矩阵减邻接矩阵
printf("%.8lf",S.Det()*res);//求答案
}
}T;
int main()
{
RI i,j;for(scanf("%d",&n),i=1;i<=n;++i) for(j=1;j<=n;++j) scanf("%lf",&a[i][j]);//读入
return T.Solve(),0;
}
【BZOJ3534】[SDOI2014] 重建(矩阵树定理)的更多相关文章
- BZOJ3534:[SDOI2014]重建(矩阵树定理)
Description T国有N个城市,用若干双向道路连接.一对城市之间至多存在一条道路. 在一次洪水之后,一些道路受损无法通行.虽然已经有人开始调查道路的损毁情况,但直到现在几乎没有消息传回. 幸运 ...
- [SDOI2014] 重建 - 矩阵树定理,概率期望
#include <bits/stdc++.h> #define eps 1e-6 using namespace std; const int N = 55; namespace mat ...
- BZOJ3534 [Sdoi2014]重建 【矩阵树定理】
题目 T国有N个城市,用若干双向道路连接.一对城市之间至多存在一条道路. 在一次洪水之后,一些道路受损无法通行.虽然已经有人开始调查道路的损毁情况,但直到现在几乎没有消息传回. 辛运的是,此前T国政府 ...
- 【BZOJ3534】重建(矩阵树定理)
[BZOJ3534]重建(矩阵树定理) 题面 BZOJ 洛谷 题解 这.... 矩阵树定理神仙用法???? #include<iostream> #include<cmath> ...
- luoguP3317 [SDOI2014]重建 变元矩阵树定理 + 概率
首先,我们需要求的是 $$\sum\limits_{Tree} \prod\limits_{E \in Tree} E(u, v) \prod\limits_{E \notin Tree} (1 - ...
- [luoguP3317] [SDOI2014]重建(矩阵树定理)
传送门 为了搞这个题又是学行列式,又是学基尔霍夫矩阵. 矩阵树定理 本题题解 无耻地直接发链接,反正我也是抄的题解.. #include <cstdio> #include <cma ...
- 【Luogu】P3317重建(高斯消元+矩阵树定理)
题目链接 因为这个专门跑去学了矩阵树定理和高斯消元qwq 不过不是很懂.所以这里只放题解 玫葵之蝶的题解 某未知dalao的矩阵树定理 代码 #include<cstdio> #inclu ...
- 【算法】Matrix - Tree 矩阵树定理 & 题目总结
最近集中学习了一下矩阵树定理,自己其实还是没有太明白原理(证明)类的东西,但想在这里总结一下应用中的一些细节,矩阵树定理的一些引申等等. 首先,矩阵树定理用于求解一个图上的生成树个数.实现方式是:\( ...
- @总结 - 7@ 生成树计数 —— matrix - tree 定理(矩阵树定理)与 prüfer 序列
目录 @0 - 参考资料@ @0.5 - 你所需要了解的线性代数知识@ @1 - 矩阵树定理主体@ @证明 part - 1@ @证明 part - 2@ @证明 part - 3@ @证明 part ...
随机推荐
- LG1344 「USACO4.4」Pollutant Control 最小割
问题描述 LG1344 题解 我太菜了,我一开始竟然没有看出这是个最小割裸题... 两个询问. 第一个询问,直接跑最小割就好了. 第二个询问,建图的时候边权建 \(1\) ,代表割掉这条边需要 \(1 ...
- js中var、let、const的区别 (待总结)
https://blog.csdn.net/qq_36784628/article/details/80966826 https://www.cnblogs.com/fly_dragon/p/8669 ...
- 【51nod1678】lyk与gcd(莫比乌斯反演+枚举因数)
点此看题面 大致题意: 一个长度为\(n\)的数组,实现两种操作:单点修改,给定\(i\)求\(\sum_{j=1}^na_j[gcd(i,j)=1]\). 莫比乌斯反演 考虑推一推询问操作的式子: ...
- Linux中vim和vi编辑器的使用
vim 和 vi 的关系: 可以将vim视作vi的高级版本,vim可以用颜色或下划线的方式来显示一些特殊信息.vim不止是文本处理软件,而可以说是一个程序开发工具.因为vim里面加入了很多额外功能,例 ...
- 策略路由PBR(不含track)
策略路由:是一种依据用户制定的策略进行路由选择的机制.(公义)在特定数据进入路由表前,对其进行操控的方式.(本人定义) 根据作用对象的不同,策略路由可分为本地策略路由和接口策略路由: · 本地策略路由 ...
- Spring Session工作原理
本文首发于 vivo互联网技术 微信公众号 https://mp.weixin.qq.com/s/KCOFv0nRuymkX79-RZi9eg 作者:张正林 目录:1.引入背景2.使用方法3.工作流程 ...
- springcloud微服务多节点高性能、高可用、高并发部署
1. 共有三个服务 discovery服务,domain服务,gateway服务. discovery服务是用来注册其他服务的,作为服务治理用. domain服务是主业务服务. gateway服务是所 ...
- JavaFx出现错误Caused by: java.lang.NullPointerException: Location is required的解决方法
问题截图: "C:\Program Files\Java\jdk1.8.0_131\bin\java.exe" "-javaagent:I:\IntelliJ IDEA ...
- C# System.Timers Demo
static void Main(string[] args) { SystemTimersDemo(); Console.ReadLine(); } static void SystemTimers ...
- WPF MVVM,Prism,Command Binding
1.添加引用Microsoft.Practices.Prism.Mvvm.dll,Microsoft.Practices.Prism.SharedInterfaces.dll: 2.新建文件夹,Vie ...