题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=3534

题意:给定一个无向图,每条边有选择概率P;求选出的边恰是一棵生成树的概率。

首先,将A[i][j]从01变成这条边的概率,然后a[i][i]减去每条有i的边的概率,对此求n-1阶主子式的行列式,

可以得到:Σ(p[i]*p[i+1]*p[i+2]*...p[n-1])(p代表某棵树的集合中,这个集合里每条边选中的概率)

可是,这个概率只与树边有关,却无法保证没有非树边

我们重新考虑,令原先加入的a[i][j]变成(a[i][j]/(1-a[i][j])),再令tmp=(1-p[1])*(1-p[2])*...(1-p[m]),然后求行列式,最后选中的树边的因子,都是P[i],不选中的非树边的因子是(1-p[i]),于是问题完美解决。

 1 #include<algorithm>
 2 #include<cstdio>
 3 #include<cmath>
 4 #include<cstring>
 5 #include<iostream>
 6 double a[505][505];
 7 const double eps=1e-10;
 8 int n;
 9 int zero(double x){
10     if (x<-eps) return -1;
11     else return x>eps;
12 }
13 double gauss(){
14     double res=1;
15     for (int i=1;i<=n;i++){
16         int k=i;
17         for (int j=i+1;j<=n;j++) if (fabs(a[j][i])>fabs(a[k][i])) k=j;
18         if (k!=i){
19             for (int j=1;j<=n;j++) std::swap(a[i][j],a[k][j]);
20         }
21         for (int j=i+1;j<=n;j++){
22          double tmp=a[j][i]/a[i][i];
23          for (int k=i;k<=n;k++)
24           a[j][k]-=a[i][k]*tmp;
25         }
26         if (!zero(a[i][i])) return 0;
27     }
28     for (int i=1;i<=n;i++) res*=a[i][i];
29     return std::fabs(res);
30 }
31 int main(){
32     scanf("%d\n",&n);
33     double tm=1;
34     for (int i=1;i<=n;i++)
35         for (int j=1;j<=n;j++){
36             scanf("%lf",&a[i][j]);
37             if (i==j) continue;
38             if (a[i][j]>1-eps) a[i][j]-=eps;
39             if (i<j) tm*=1-a[i][j];
40             a[i][j]/=1-a[i][j];
41         }
42     for (int i=1;i<=n;i++)
43      for (int j=1;j<=n;j++)
44       if (i!=j)
45        a[i][i]-=a[i][j];
46     n--;
47     printf("%.10lf\n",gauss()*tm);
48 }

转载于:https://www.cnblogs.com/qzqzgfy/p/5535807.html

BZOJ 3534 重建相关推荐

  1. [bzoj 3534][Sdoi2014] 重建

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

  2. 旧题新做:从idy的视角看数据结构

    "今天你不写总结--!!!" 额-- 还是讲我的吧.这些考试都是idy出的题. 20170121:DFS序. ST表.线段树练习 这是第一次考数据结构. Problem 1. se ...

  3. 国内有哪些好用的 Online Judge

    前言 很多 oier 和 acmer 都会去找一个比较好的 OJ 来刷题以提高自身的能力,而很多国外的网站极其不稳定,比如说 C 某和 V 某.所以很多人都会倾向于在国内 OJ 上刷题,那么国内有什么 ...

  4. BZOJ 2957楼房重建

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

  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 2957: 楼房重建(线段树+递归)

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

  9. BZOJ 2957: 楼房重建

    Description 小A的楼房外有一大片施工工地,工地上有N栋待建的楼房.每天,这片工地上的房子拆了又建.建了又拆.他经常无聊地看着窗外发呆,数自己能够看到多少栋房子. 为了简化问题,我们考虑这些 ...

最新文章

  1. lisp pl线线段数_vlisp每日源码(标注多段线线长)
  2. 用js自动把url加入ubb代码的函数
  3. PostgreSQL GIN multi-key search 优化
  4. 更轻易地实现 Jwt Token
  5. 1609: [Usaco2008 Feb]Eating Together麻烦的聚餐
  6. 全数字实时仿真平台SkyEye经典案例——空间站项目
  7. ros 安装c++编译的可执行文件
  8. Docker与容器化-04-Docker私有仓库与镜像迁移备份
  9. pku1274 The Perfect Stall
  10. Eye Tracking Methodology Theory and Practice, Third Edition
  11. 用MATLAB求一阶微分方程(组)数值解
  12. h3c服务器登录密码修改,H3C交换机配置ssh密码验证登录方式
  13. python opengl书籍_初试PyOpenGL一 (Python+OpenGL)
  14. 树形动态规划之树的最大独立集
  15. OpenAI的API key获取方法
  16. 解决思科 Cisco Packet Tracer 7.3登录问题
  17. 羊毛地毯可以用水洗吗
  18. 知识兔课程揭秘跨境电商七大骗局!
  19. 并行:并行编程的基础概述
  20. 公链蓬勃发展——多链世界从理想走向现实 | 2021 区块链年报|Footprint Analytics

热门文章

  1. 零基础Java学习之super关键字
  2. NumPy中可用的聚合函数
  3. Windbg调试中遇到的问题
  4. Design Pattern----06.Creational.Singleton.Pattern (Delphi Sample)
  5. Uva1593 代码对齐
  6. 关于SQL语言的初步认识
  7. 03-----数据类型
  8. vs2015下载 简体中文版/企业版 附邀请码
  9. leetcode 206 Reverse Linked List
  10. C语言之头文件,static与const关键字