qwq
一开始想了个错的做法。

直接开始说比较正确的做法吧。
首先我们考虑题目的\(ans\)该怎么去求
我们令\(x\)表示原图中的某一条边

\[ans = \sum \prod_{x\in tree} p_x \prod_{x\ not\in tree} (1-p_x)\]

qwq而根据矩阵树定理,我们可以求出来所有生成树的边权乘积的和,也就是前一部分。

现在我们考虑应该怎么优化第二部分。
qwq
我们经过推理能发现,我们可以用总的除去在生成树里面的求出来不在生成树里面的。

也就是说
\[\prod_{x\ not \in tree} (1-p_x)= \frac{\prod (1-p_i)}{\prod_{x\in tree} (1-p_j)}\]

我们带回原柿,然后把\(\prod (1-p_i)\)提出来

\[ans = \prod (1-p_x) \times \sum \prod_{x \in tree} \frac{p_x}{1-p_x}\]

那么现在,对于后面那一项,我们只需要把所有的边都设成权值是\(\prod_{x \in tree} \frac{p_x}{1-p_x}\)
然后每个\(d[i]\)表示与他连接的所有边权的和。

直接跑矩阵树定理就能求出来\(sum\)啦,然后直接用一开始求的\(\prod p_x\),一减就OK了

但是这里有一个需要注意的地方就是当\(p_x\)等于\(1\)的时候,我们应该将他的权值设成\(1-eps\)

因为当\(p\)等于1的时候,\(\frac{1}{1-p} -> inf\)

然后有因为\(\frac{1}{eps}->inf\)

所以\(p=1-eps\)

然后弄完权值直接跑矩阵树定理就好

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<cmath>
#include<queue>
#include<map>
#include<set>
#define mk make_pair
#define ll long long
#include<ctime>
using namespace std;
inline int read()
{int x=0,f=1;char ch=getchar();while (!isdigit(ch)) {if (ch=='-') f=-1;ch=getchar();}while (isdigit(ch)) {x=(x<<1)+(x<<3)+ch-'0';ch=getchar();}return x*f;
}
const int maxn = 110;
const double eps = 1e-6;
double a[maxn][maxn];
double d[maxn];
int n;
double ans=1;
void gauss()
{int k=1;for (int i=1;i<=n;i++){int now = k;while(now<=n && fabs(a[now][i])<=eps)  now++;if (now==n+1) continue;for (int j=1;j<=n+1;j++) swap(a[now][j],a[k][j]);for (int j=1;j<=n;j++){if (j!=k){double t = a[j][i]/a[k][i];for (int p=1;p<=n+1;p++) a[j][p]-=t*a[k][p];}}++k;}for (int i=1;i<=n;i++)ans=ans*a[i][i];
}
double ymh=1;
int main()
{n=read();for (int i=1;i<=n;i++)for (int j=1;j<=n;j++){double x;scanf("%lf",&x);if (x==1) x = 1-eps;if (i<j) ymh=ymh*(1-x);x=x/(1-x);a[i][j]=-x;d[i]+=x;//d[j]+=x;}for (int i=1;i<=n;i++) a[i][i]=d[i];gauss();printf("%.5lf",ans*ymh);return 0;
}

转载于:https://www.cnblogs.com/yimmortal/p/10152025.html

洛谷3317 SDOI2014重建(高斯消元+期望)相关推荐

  1. 洛谷 P5027 Barracuda(高斯消元)

    题目链接 Barracuda 题目背景 小正方形的冒险旅途,并不顺利. 一路上,小正方形看到了壮美秀丽的小岛被污染,看到了雄伟壮观的火山,还碰到了许许多多的敌人. 眼下,小正方形正在对付一个巨大的三角 ...

  2. [BZOJ 3143][Hnoi2013]游走(高斯消元+期望)

    Description 一个无向连通图,顶点从1编号到N,边从1编号到M. 小Z在该图上进行随机游走,初始时小Z在1号顶点,每一步小Z以相等的概率随机选 择当前顶点的某条边,沿着这条边走到下一个顶点, ...

  3. BZOJ 3143: [Hnoi2013]游走 高斯消元 期望

    3143: [Hnoi2013]游走 Time Limit: 10 Sec  Memory Limit: 128 MB Submit: 3463  Solved: 1535 [Submit][Stat ...

  4. BZOJ 1778: [Usaco2010 Hol]Dotp 驱逐猪猡(高斯消元+期望dp)

    传送门 解题思路 设\(f(x)\)表示到\(x\)这个点的期望次数,那么转移方程为\(f(x)=\sum\frac{f(u)*(1 - \frac{p}{q})}{deg(u)}\),其中\(u\) ...

  5. 洛谷 - P4783 【模板】矩阵求逆(高斯消元求逆矩阵)

    题目链接:点击查看 题目大意:给出一个 n * n 的矩阵,求出其逆矩阵,mod 为 1e9 + 7,若不存在输出 No Solution 题目分析:囤个模板,原理就是,初始时在原矩阵右侧设置一个单位 ...

  6. 【洛谷P3389】【模板】高斯消元

    题目链接 题目描述 给定一个线性方程组,对其求解 输入输出格式 输入格式: 第一行,一个正整数 n 第二至 n+1行,每行 n+1 个整数,为a1, a2 .....an​ 和 b,代表一组方程. 输 ...

  7. 洛谷 P3211 [HNOI2011]XOR和路径(推dp+高斯消元)

    传送门 首先,异或的话直接讨论不好讨论,那么我们可以按位讨论,对于每一位讨论出来一个结果,然后将结果相加就好了. 然后考虑怎么讨论一位上的结果. 我们可以设出来一个dp方程:f(i)表示i到n的异或和 ...

  8. 【BZOJ4820】[SDOI2017]硬币游戏(高斯消元)

    [BZOJ4820][SDOI2017]硬币游戏(高斯消元) 题面 BZOJ 洛谷 题解 第一眼的感觉就是构\(AC\)自动机之后直接高斯消元算概率,这样子似乎就是\(BZOJ1444\)了.然而点数 ...

  9. 高斯消元(Gaussian elimination)

    我们将分两个部分来说明高斯消去,第一部分是数学方面,第二个部分是如何用 C++ 来实现. 第一部分 数学知识 什么是高斯消去 高斯消元法(或译:高斯消去法),是线性代数规划中的一个算法,可用来为线性方 ...

最新文章

  1. 面试官:如何做 API 接口防刷??
  2. Windows10 中使用 virtualbox 安装ubuntu 虚拟机
  3. Nginx反向代理多个应用时,通过BluePring使Flask支持二级路径(URL前缀)
  4. SpringBoot底层注解-@ConfigurationProperties配置绑定
  5. 一个学校内部的计算机网络属于,一个教室内计算机联成的网络属于____。
  6. 红帽:将开源进行到底!
  7. 微软想证明Windows比Chrome好 主要源自恐惧?
  8. What's the difference between forever and for good?
  9. VMware Workstation Pro新建虚拟机的操作步骤(插图)
  10. rk3568 sensor调试记录
  11. [ZT]完全用Linux工作,摈弃Windows
  12. linux重置ilo,HP DL380 Gen9 服务器ilo密码忘记如何重置
  13. 中国气象局国家气候中心
  14. 安装jdk,没有jre
  15. TokenInsight 对话首席——获取增量用户 公链崛起的关键之战
  16. vue项目搭建以及环境配置
  17. n个整数,找出连续的m个数加和是最大
  18. “双指针”法解决链表问题
  19. 自助下单彩虹云商城系统2023最新免授权独立版源码安装教程
  20. php100以内质数求和,100以内的质数_PHP质数计算三种方法 php求100以内的质数

热门文章

  1. 编程之美-2.14-求数组的子数组之和的最大值
  2. 小区的足球场地实地拍摄
  3. laravel实现读写分离
  4. React Native 项目常用第三方组件汇总
  5. UVA11624 Fire!
  6. Java面向对象之USB接口实例
  7. HTML5 Canvas、内联 SVG、Canvas vs. SVG
  8. 实变函数与泛函分析导论
  9. Atitit. atiJavaExConverter4js  新的特性
  10. 【树】Kth Smallest Element in a BST(递归)