P3317 [SDOI2014]重建
传送门
矩阵树原来还有一个变元矩阵树定理的么?
简单来说就是要求\(G\)的所有生成树的权值积的和,可以把基尔霍夫矩阵\(K\)改一改,\(K_{i,i}\)表示与\(i\)连的所有边的权值和,\(K_{i,j}\)为\((i,j)\)边权的相反数。那么只要求出它的一个主子式的绝对值就是答案了
考虑本题,就是要我们求\[ans=\sum_T\prod_{e\in T}p_e\prod_{e\notin T}(1-p_e)\]
考虑一下那个变元矩阵树定理,可以求出\[\sum_T\prod_{e\in T}w_e\]
因为\[\prod_{e\notin T}(1-p_e)=\frac{\prod_e(1-p_e)}{\prod_{e\in T}(1-p_e)}\]
然后代入上式,可得\[ans=\prod_e(1-p_e)\sum_T\prod_{e\in T}\frac{p_e}{1-p_e}\]
那么我们把\(\frac{p_e}{1-p_e}\)设为这一条边的权值,用变元矩阵树带进去搞一搞,再乘上前面那一串东西就好了
然而如果\(p_e=1\)该咋办
因为\(\frac{p_e}{0}=\infty\),又有\(\frac{p_e}{eps}=\infty\),那就让\(p_e\)近似等于\(1-eps\)即可(反正误差很小了)
//minamoto
#include<bits/stdc++.h>
#define rint register int
using namespace std;
const int N=55;const double eps=1e-8;
int n;double pro=1,G[N][N];
inline int cmp(double x){return fabs(x)<eps?0:(x<0?-1:1);}
double det(int n){int mx;double t,res=1;for(rint i=1;i<=n;++i){mx=i;for(rint j=i+1;j<=n;++j)if(cmp(G[mx][i]-G[j][i])<0)mx=i;if(mx!=i)for(rint j=i;j<=n;++j)swap(G[i][j],G[mx][j]);if(!G[i][i])return 0;for(rint j=i+1;j<=n;++j){t=G[j][i]/G[i][i];for(rint k=i;k<=n;++k)G[j][k]-=G[i][k]*t;}res*=G[i][i];}return fabs(res);
}
int main(){
// freopen("testdata.in","r",stdin);scanf("%d",&n);for(rint i=1;i<=n;++i)for(rint j=1;j<=n;++j){scanf("%lf",&G[i][j]);if(i==j)continue;if(G[i][j]>1-eps)G[i][j]-=eps;if(i<j)pro*=(1-G[i][j]);G[i][j]/=(1-G[i][j]);}for(rint i=1;i<=n;++i)for(rint j=1;j<=n;++j)if(i!=j)G[i][i]+=G[i][j],G[i][j]=-G[i][j];printf("%.5lf\n",det(n-1)*pro);return 0;
}
转载于:https://www.cnblogs.com/bztMinamoto/p/9980018.html
P3317 [SDOI2014]重建相关推荐
- [bzoj 3534][Sdoi2014] 重建
传送门 Description T国有N个城市,用若干双向道路连接.一对城市之间至多存在一条道路. 在一次洪水之后,一些道路受损无法通行.虽然已经有人开始调查道路的损毁情况,但直到现在几乎没有消息传回 ...
- BZOJ3534:[SDOI2014]重建(矩阵树定理)
Description T国有N个城市,用若干双向道路连接.一对城市之间至多存在一条道路. 在一次洪水之后,一些道路受损无法通行.虽然已经有人开始调查道路的损毁情况,但直到现在几乎没有消息传回. 幸运 ...
- 洛谷3317 SDOI2014重建(高斯消元+期望)
qwq 一开始想了个错的做法. 哎 直接开始说比较正确的做法吧. 首先我们考虑题目的\(ans\)该怎么去求 我们令\(x\)表示原图中的某一条边 \[ans = \sum \prod_{x\in t ...
- 【学习笔记】矩阵树定理(Matrix-Tree)
整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 目录 一.矩阵树定理 二.常用定理 三.例题 1. Luogu P6178 [模板]Matrix-Tr ...
- 最小生成树、矩阵树定理、Prufer序列总结
Kruskal算法 按边权排序,从小到大合并不在同一集合两点即可 Prim算法 每次加入一个到当前已选点集最近的点 P2619 [国家集训队]Tree I 考虑二分,每次给白边加上一个mid,通过这种 ...
- 2019年暑假慈溪集训(更新ing)
前言 换了一个地方被吊打... \(Aug\ 5th\) 今天早上\(10\)点左右出发了,中午在服务区吃饭,下午\(4\)点左右才到. 这次和\(XZY\)徐教练.\(LTL\)蓝指导.\(hl66 ...
- Matrix-tree 定理的一些整理
\(Matrix-tree\) 定理用来解决一类生成树计数问题,以下前置知识内容均是先基于无向无权图来介绍的.有关代数余子式的部分不是很明白,如果有错误还请指出-- 部分内容参考至:\(Blog\_1 ...
- 2020.6月做题记录
长期计划 SAM专题 date:2020.05.21-2020.06.01 基础类: Problem Finished P3804 [模板]后缀自动机 (SAM) √√√ SP1811 LCS - L ...
- 矩阵树定理(Kirchhoff || Laplace)初探——Part 1(无向图计数)
必备知识: 高斯消元,图论基本知识(好像就这...(雾)) 这里是无向图部分,请不要走错场... 定义 我们将邻接矩阵定义为矩阵\(A(u,v)\),我想邻接矩阵就不用再多说了: 我们将每个点的度数矩 ...
- python实现二叉树的重建2 之由中序遍历和后序遍历重建
前言 通过上一节对python实现二叉树的重建1 之由前序遍历和中序遍历重建,我相信我们再来做这个问题就不难了,完全可以照猫画虎的来实现,具体的原理几乎是一样的,直接上代码了 code # 通用解法d ...
最新文章
- iOS 关于pods-frameworks.sh:permission denied报错的解决
- Android使用Apache HttpClient发送GET、POST请求
- VS2017配置opencv教程(图文详解)
- 2019贵州大学计算机研究生,贵州大学2019年硕士研究生招生拟录取名单公示(一)...
- (软件工程复习核心重点)第十章面向对象设计-第五节:设计数据管理子系统和设计类中的服务
- 华为鸿蒙系统发展时间2021年,耗时八年打造国产系统,华为鸿蒙OS质疑声不断,它才是真正未来...
- java静态接口方法使用_使用静态方法对接口进行Java编程
- SimpleFs文件系统初步二(测试用的块设备构建)
- 创业经验谈(转自:ouravr.com)
- 合成分红游戏源码_趣合成app开发(现成源码演示案例)
- 基于Vue的单页面格式化数据高亮编辑器组件:兼容json/xml/html/txt多种格式
- CSS---通向臃肿的道路(关于 “separation of concerns” (SoC)的原则)
- Mac Mounty正常卸载方法(mount failed异常解决)
- Firefox OS简单介绍
- 【葡萄城报表】还在为画“类Word文档报表”而发愁吗?
- 玩家交互体验—剑网3师徒系统
- 云闪付华为P9指纹_截胡小米支付妥妥的!华为支付正式上线,支持25家银行
- FMDB-FMDatabaseQueue
- 使用Angular和API服务器显示相关表中的数据
- bzoj1001/BJOI2006 狼抓兔子
热门文章
- torch运行错误libcudnn Unsupported HDF5 version: 1.10.2错误
- 最新基于高德地图的android进阶开发(1)获取 Map API Key
- java添加录音,大家说说java程序里怎么插入视频和音频啊
- idea引不进jdk的包_idea install 时提示jdk的某个jar包的包不存在的问题
- Raki的读paper小记:A Concise Model for Multi-Criteria Chinese Word Segmentation with Transformer Encoder
- 第三届蓝桥杯省赛---马虎的算式
- u盘启动盘安装centos7.5操作系统
- [JSOI2008]最大数maxnumber(线段树)
- 基于三台主机部署phpwind
- extern 关键字详解