BZOJ 3534: [Sdoi2014]重建(Matrix Tree)
解题思路
比较容易看的出来矩阵树定理。然后就怒送一Wa,这个矩阵树定理是不能直接用的。题目要求的其实是这个玩意。
\]
而矩阵树能求的东西本质上其实是每棵生成树的积的和,说人话就是这个。
\]
这个形式跟上面那个很像,但还是有点不一样。我们考虑将上面那个式子化简。根据
\]
把这玩意往最上面那个式子里一带,神奇的事情发生了:
\]
前面这个玩意可以直接算出来。后头这个玩意直接上矩阵树,把邻接矩阵的边权改成\(\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)的更多相关文章
- bzoj 3534: [Sdoi2014]重建【矩阵树定理】
啊啊啊无脑背过果然不可取 比如这道题就不会写 参考:https://blog.csdn.net/iamzky/article/details/41317333 #include<iostream ...
- [bzoj 3534][Sdoi2014] 重建
传送门 Description T国有N个城市,用若干双向道路连接.一对城市之间至多存在一条道路. 在一次洪水之后,一些道路受损无法通行.虽然已经有人开始调查道路的损毁情况,但直到现在几乎没有消息传 ...
- 【BZOJ 3534】 3534: [Sdoi2014]重建 (Matrix-Tree Theorem)
3534: [Sdoi2014]重建 Time Limit: 10 Sec Memory Limit: 512 MBSec Special JudgeSubmit: 709 Solved: 32 ...
- @总结 - 7@ 生成树计数 —— matrix - tree 定理(矩阵树定理)与 prüfer 序列
目录 @0 - 参考资料@ @0.5 - 你所需要了解的线性代数知识@ @1 - 矩阵树定理主体@ @证明 part - 1@ @证明 part - 2@ @证明 part - 3@ @证明 part ...
- BZOJ.4031.[HEOI2015]小Z的房间(Matrix Tree定理 辗转相除)
题目链接 辗转相除解行列式的具体实现? 行列式的基本性质. //864kb 64ms //裸的Matrix Tree定理.练习一下用辗转相除解行列式.(因为模数不是质数,所以不能直接乘逆元来高斯消元. ...
- bzoj 1016 [JSOI2008]最小生成树计数——matrix tree(相同权值的边为阶段缩点)(码力)
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1016 就是缩点,每次相同权值的边构成的联通块求一下matrix tree.注意gauss里的 ...
- 一篇自己都看不懂的Matrix tree总结
Matrix tree定理用于连通图生成树计数,由于博主太菜看不懂定理证明,所以本篇博客不提供\(Matrix\ tree\)定理的证明内容(反正这个东西背结论就可以了是吧) 理解\(Matrix\ ...
- SPOJ.104.Highways([模板]Matrix Tree定理 生成树计数)
题目链接 \(Description\) 一个国家有1~n座城市,其中一些城市之间可以修建高速公路(无自环和重边). 求有多少种方案,选择修建一些高速公路,组成一个交通网络,使得任意两座城市之间恰好只 ...
- P3317 [SDOI2014]重建(Matrix-tree+期望)
P3317 [SDOI2014]重建 详情看这位神犇的blog 剩下的注释在code里吧....... #include<iostream> #include<cstdio> ...
随机推荐
- PyCharm Change Font Size
file->settings->colors&fonts-> save as (save the current scheme as your own)-> font- ...
- 【Redis】分布式锁RedLock
普通实现 说道Redis分布式锁大部分人都会想到: 1.setnx+lua, 2.setkey value px milliseconds nx. - 获取锁(unique_value可以是UUID等 ...
- UnixBench算分介绍
关于如何用UnixBench,介绍文章很多,这里就不展开了.这里重点描述下它是如何算分的. 运行参数 碰到很多客户,装好后,直接./Run,就把结果跑出来了,然后还只取最后一个分值,比谁高谁低.下面列 ...
- Android中对TextView中的部分内容的字体样式的设置方法
Android中的TextView中内容,有时候需要对其部分内容添加下划线和颜色操作: String str = "回复 " + uname + " 的评论: " ...
- js设计模式——2.外观模式
js设计模式——2.外观模式
- php中正则表达式总结(不容错过)
php中正则表达式总结(不容错过) 一.总结 一句话总结: 无论js,php,java,python里面中的正则都是差不多一样的,所以用点脑子 用到正则的地方很多,比如 nginx的配置文件 1.ph ...
- Java-Class-C:java.util.BigDecimal
ylbtech-Java-Class-C:java.util.BigDecimal 1.返回顶部 2.返回顶部 3.返回顶部 4.返回顶部 1. /* * Copyright (c) 19 ...
- Django+paramiko实现webshell
说明 基于 python3.7 + django 2.2.3 实现的 django-webshell,支持颜色显示,支持 tab 命令补全,项目地址:https://github.com/leffss ...
- Address already in use: JVM_Bind 8083端口被占用的几个解决办法
运行Tomcat时若出现Address already in use: JVM_Bind 端口被占用,一般使用下面几个办法可以解决: 假设端口为8083 1.启动cmd, 执行命令netstat -a ...
- 2019牛客多校第三场H-Magic Line
Magic Line 题目传送门 解题思路 因为坐标的范围只有正负1000,且所有点坐标都是整数,所以所有点相连构成的最大斜率只有2000,而我们能够输出的的坐标范围是正负10^9.所以我们先把这n个 ...