传送门

Description

T国有N个城市,用若干双向道路连接。一对城市之间至多存在一条道路。

在一次洪水之后,一些道路受损无法通行。虽然已经有人开始调查道路的损毁情况,但直到现在几乎没有消息传回。

幸运的是,此前T国政府调查过每条道路的强度,现在他们希望只利用这些信息估计灾情。具体地,给定每条道路在洪水后仍能通行的概率,请计算仍能通行的道路恰有N-1条,且能联通所有城市的概率。

Solution

给出每条边出现的概率,求生成一棵树的概率。

首先要知道矩阵树定理和变元矩阵树定理。。。

对于一个无向图G,它的生成树个数等于其基尔霍夫Kirchhoff矩阵任何一个N-1阶主子式的行列式的绝对值

基尔霍夫Kirchhoff矩阵 K =度数矩阵 D - 邻接矩阵 A

这里邻接矩阵可以有不同形式

  • 如果\(A[i][j]\)表示i\(i\)和\(j\)之间边的数量,则\(det\)等于生成树的数量
  • 如果\(A[i][j]\)表示\(i\)和\(j\)之间边的长度,则\(det=\sum_{T} \prod T_{e_i}\),也就是每个生成树的边权积之和

怎么求行列式?

讲得很浅显的博客

这里有几个性质:

  • 交换两行(列),行列式变号
  • 加上另外一行的\(k\)倍,行列式不变

所以用高斯消元,把它变成一个上三角矩阵,那么它的行列式就是对角线的乘积啦

Code

#include <bits/stdc++.h>
#define ll long long
#define max(a,b) ((a)>(b)?(a):(b))
#define min(a,b) ((a)<(b)?(a):(b))
#define abs(x) (x>0?x:-x)
inline int read()
{int x=0,f=1;char ch=getchar();while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}while(ch>='0'&&ch<='9'){x=(x<<3)+(x<<1)+ch-'0';ch=getchar();}
}
#define eps (1e-8)
int n;
double ans=1.,a[55][55];double Gauss()
{double ret=1.;register int i,j,k;for(i=1;i<n;++i){    //for(j=i+1;j<n;++j)//    if(abs(a[j][i])>abs(a[i][i])) std::swap(a[j],a[i]),ret=-ret;for(j=i+1;j<n;++j){double t=a[j][i]/a[i][i];for(k=i;k<n;++k) a[j][k]-=t*a[i][k];}ret*=a[i][i];}return abs(ret);
}int main()
{scanf("%d",&n);register int i,j;for(i=1;i<=n;++i)for(j=1;j<=n;++j){scanf("%lf",&a[i][j]);double t=fabs(1.-a[i][j])<eps?eps:(1.-a[i][j]);if(i<j) ans*=t;a[i][j]=a[i][j]/t;}for(i=1;i<=n;++i)for(j=1;j<=n;++j)if(i!=j) a[i][i]+=a[i][j],a[i][j]=-a[i][j];printf("%.10lf\n",Gauss()*ans);return 0;
}

Blog来自PaperCloud,未经允许,请勿转载,TKS!

转载于:https://www.cnblogs.com/PaperCloud/p/10214423.html

[bzoj 3534][Sdoi2014] 重建相关推荐

  1. BZOJ 2957楼房重建

    传送门 线段树 //Twenty #include<cstdio> #include<cstdlib> #include<iostream> #include< ...

  2. BZOJ 3529: [Sdoi2014]数表

    二次联通门 : BZOJ 3529: [Sdoi2014]数表 Latex的公式写起来略麻烦... 设$\LARGE F(x)=\sum_{d|x} \lfloor \dfrac xd \rfloor ...

  3. BZOJ 3531[Sdoi2014]旅行

    BZOJ 3531[Sdoi2014]旅行 题面描述 传送门 题目分析 可以考虑到,如果这个题所有城市都只信一种宗教的话,就是一个sb树剖,直接进行链的查询和修改就能搞定.多个宗教的话,可以有一种暴力 ...

  4. BZOJ 3534 重建

    题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=3534 题意:给定一个无向图,每条边有选择概率P:求选出的边恰是一棵生成树的概率. 首先,将 ...

  5. [Luogu P4292] [BZOJ 1758] [WC2010]重建计划

    BZOJ 传送门 洛谷传送门 题目描述 X国遭受了地震的重创, 导致全国的交通近乎瘫痪,重建家园的计划迫在眉睫.X国由NNN个城市组成, 重建小组提出,仅需建立N−1" role=" ...

  6. 【BZOJ—2957楼房重建】【连载:请在T台上微笑】

    长久没有发博文了...对对对, 所以最近就趁着暑假多发发吧 颓废是革命的本钱: 推荐一个我喜欢的新连载漫画吧[请在T台上微笑] BZOJ 2957 [楼房重建] Description 小A的楼房外有 ...

  7. [luogu 4292][bzoj 1758][WC2010] 重建计划(点分治 + dp + 单调队列优化 + 启发式合并)

    [WC2010]重建计划 problem solution code problem 洛谷指路 solution 一看那个道路平均价值的式子:AvgValue=∑e∈Sv(e)∣S∣\text{Avg ...

  8. [BZOJ 3531] [Sdoi2014] 旅行 【离线+LCT】

    题目链接:BZOJ - 3531 题目分析 题目询问一条路径上的信息时,每次询问有某种特定的文化的点. 每个点的文化就相当于一种颜色,每次询问一条路径上某种颜色的点的信息. 可以使用离线算法, 类似于 ...

  9. bzoj 2957: 楼房重建(线段树+递归)

    2957: 楼房重建 Time Limit: 10 Sec  Memory Limit: 256 MB Submit: 2778  Solved: 1314 [Submit][Status][Disc ...

最新文章

  1. 视觉Transformer最新综述
  2. ubuntu18.04 实现中文化 中文输入法
  3. mdpi的手机_【初印象】Android手机屏幕适配API:nodpi,xhdpi,hdpi,mdpi,ldpi
  4. Python之迭代器和生成器
  5. 使用代码执行organization unit determination逻辑
  6. 使用cnn预测房价_使用CNN的人和马预测
  7. Linux中wait接口用于延时,linux2.6驱动编写参考
  8. 用这10个小技巧加速Python编程
  9. centos怎样安装mysql,Centos安装mySQL
  10. windows 通过 bat 脚本后台启动 jar 包,通过 jps 找到 pid,然后停止指定 jar 包,附 linux shell 脚本启停脚本
  11. Maven 详解及常用命令
  12. 简单实现RPC/RMI框架
  13. C++:空间坐标映射到球面坐标/全景图
  14. 使用RNN构建机器翻译模型
  15. C++根据旋转轴和角度求旋转矩阵
  16. php实现智能音箱播放内容,海尔小优智能音箱有这些功能 用好它更方便
  17. 第9章第8节:制作过渡页幻灯片的版式 [PowerPoint精美幻灯片实战教程]
  18. 【蜂口 | AI人工智能】人脸美颜——龙鹏 深度学习与人脸图像应用连载(八)...
  19. USB Camera摄像头 (UVC 与 gspca)
  20. 关于STAR-CCM+中interface的个人思考

热门文章

  1. 【Android】安卓布局文件中xmlns属性
  2. UIScrollView 使用
  3. java网络编程的通信原理_11 - 网络编程之设备间通信原理
  4. egg 自学入门demo分享
  5. 关于java设计模式笔记
  6. 《learning ROS for robotics programming》
  7. Android 拉伸四周空白,中间内容不变的9Patch
  8. logback logback.xml常用配置详解(三) filter
  9. [RQNOJ313]波浪数
  10. 老李分享:系统可用性评估