【题意】给定无向图,炸弹开始在1,在每个点爆炸概率Q=p/q,不爆炸则等概率往邻点走,求在每个点爆炸的概率。n<=300。

【算法】概率+高斯消元

【题解】很直接的会考虑假设每个点爆炸的概率,无法转移。每个点不爆炸的概率,也无法转移。

因为爆炸概率相同,那么每个点爆炸的概率应该和到达该点的概率正相关。(另一种思路是和到达次数正相关)

设f[x]表示炸弹到达点x的概率(之前不爆炸)。

考虑枚举点x的下一步,发现无法用点y的概率来转移(因为f[y]可能由别的路走到)。

考虑枚举点x的上一步,根据全概率公式P(A)=P(Bi)*P(A|Bi):

$$f[x]=\sum_{y}\frac{f[y]*(1-Q)}{out[y]} \ \ , \ \ y \rightarrow x$$

理解:依赖于每一个可以到达x的点y,P(Bi)就是f[y],在到达y的前提下到达x的概率就是P(A|Bi)=(1-Q)/out[y]。

(另一种理解,依赖于每一条可以到达x的边,P(Bi)=f[y]*(1-Q)/out[y],P(A|Bi)=1)

特别的,点1还可以从天而降(概率为1),所以f[1]++

最后ans[x]=f[x]*Q。或者根据炸弹最终爆炸概率为1,算Σf[i]后均分概率。

此题还可以计算每个点到达的期望次数,也是正相关。

#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
using namespace std;
const int maxn=310;
long double a[maxn][maxn];
int n,m,pp,qq,out[maxn];
void gauss(){for(int i=1;i<n;i++){int r=i;for(int j=i+1;j<=n;j++)if(fabs(a[j][i])>fabs(a[r][i]))r=j;//
        if(r!=i)for(int j=i;j<=n+1;j++)swap(a[r][j],a[i][j]);for(int j=i+1;j<=n;j++){for(int k=n+1;k>=i;k--){a[j][k]-=a[j][i]/a[i][i]*a[i][k];}}}for(int i=n;i>=1;i--){for(int j=i+1;j<=n;j++)a[i][n+1]-=a[i][j]*a[j][n+1];a[i][n+1]/=a[i][i];}
}
int main(){int pp,qq;long double Q;scanf("%d%d%d%d",&n,&m,&pp,&qq);Q=1.0*pp/qq;for(int i=1;i<=m;i++){int u,v;scanf("%d%d",&u,&v);a[v][u]+=(1-Q);if(u!=v)a[u][v]+=(1-Q);out[u]++;out[v]++;}for(int i=1;i<=n;i++){for(int j=1;j<=n;j++)if(out[j])a[i][j]=a[i][j]/out[j];a[i][i]--;}a[1][n+1]=-1;gauss();for(int i=1;i<=n;i++)printf("%.9Lf\n",a[i][n+1]*Q+(1e-13));///
    return 0;
}

View Code

注意:

1.高斯消元过程中每次要找绝对值最大的主元,这是为了避免除零,提高精度。

2.涉及负数的浮点数最后要避免-0,加eps

转载于:https://www.cnblogs.com/onioncyc/p/7613829.html

【BZOJ】1778: [Usaco2010 Hol]Dotp 驱逐猪猡相关推荐

  1. [BZOJ 1778][Usaco2010 Hol]Dotp 驱逐猪猡

    1778: [Usaco2010 Hol]Dotp 驱逐猪猡 Time Limit: 10 Sec  Memory Limit: 64 MB Submit: 690  Solved: 269 [Sub ...

  2. BZOJ 1778: [Usaco2010 Hol]Dotp 驱逐猪猡 [高斯消元 概率DP]

    1778: [Usaco2010 Hol]Dotp 驱逐猪猡 题意:一个炸弹从1出发p/q的概率爆炸,否则等概率走向相邻的点.求在每个点爆炸的概率 高斯消元求不爆炸到达每个点的概率,然后在一个点爆炸就 ...

  3. bzoj 1778: [Usaco2010 Hol]Dotp 驱逐猪猡

    Description 奶牛们建立了一个随机化的臭气炸弹来驱逐猪猡.猪猡的文明包含1到N (2 <= N <= 300)一共N个猪城.这些城市由M (1 <= M <= 44, ...

  4. BZOJ 1778 [Usaco2010 Hol] Dotp 驱逐猪猡

    Description 奶牛们建立了一个随机化的臭气炸弹来驱逐猪猡.猪猡的文明包含1到N (2 <= N <= 300)一共N个猪城.这些城市由M (1 <= M <= 44, ...

  5. bzoj 1778 [Usaco2010 Hol]Dotp 驱逐猪猡

    http://www.elijahqi.win/archives/3299 Description 奶牛们建立了一个随机化的臭气炸弹来驱逐猪猡.猪猡的文明包含1到N (2 <= N <= ...

  6. BZOJ 1778 [Usaco2010 Hol]Dotp 驱逐猪猡 ——期望DP

    思路和BZOJ 博物馆很像. 同样是高斯消元 #include <map> #include <ctime> #include <cmath> #include & ...

  7. BZOJ 1778 Usaco2010 Hol Dotp 驱逐猪猡 期望DP+高斯消元

    题目大意:给定一个无向图,炸弹从1号节点出发,每个时刻有P/Q的概率爆炸,如果某个时刻没有爆炸,就会等概率沿着随机一条出边走到下一个城市,求最终每个城市的爆炸概率 #include <cmath ...

  8. BZOJ 1778: [Usaco2010 Hol]Dotp 驱逐猪猡 概率与期望+高斯消元

    这个还挺友好的,自己相对轻松能想出来~ 令 $f[i]$ 表示起点到点 $i$ 的期望次数,则 $ans[i]=f[i]\times \frac{p}{q}$ #include <cmath&g ...

  9. BZOJ 1778: [Usaco2010 Hol]Dotp 驱逐猪猡 (高斯消元)

    题面 题目传送门 分析 令爆炸概率为PPP.设 f(i)=∑k=0∞pk(i)\large f(i)=\sum_{k=0}^{\infty}p_k(i)f(i)=∑k=0∞​pk​(i),pk(i)p ...

  10. bzoj 1778: [Usaco2010 Hol]Dotp 驱逐猪猡【dp+高斯消元】

    算是比较经典的高斯消元应用了 设f[i]为i点答案,那么dp转移为f[u]=Σf[v]*(1-p/q)/d[v],意思是在u点爆炸可以从与u相连的v点转移过来 然后因为所有f都是未知数,高斯消元即可( ...

最新文章

  1. 2、已知n个人(以编号1,2,3...n分别表示)围坐在一张圆桌周围。从编号为k的人开始报数,数到m的那个人出列; * 他的下一个人又从1开始报数,数到m的那个人又出列;依此规律重复下去,直
  2. Python知识点8——文件与异常
  3. docker 镜像名 tag 为none 的解决方案
  4. 亿级Web系统搭建――单机到分布式集群 转载
  5. SQL组合查询union
  6. 关于Ubuntu使用笔记
  7. PHP Primary script unknown 终极解决方法
  8. linux+Apache 2.2 + PHP 5.3 + MySQL 5.1
  9. 数据库设计系列[04]组织结构加入权限系统
  10. 最好用的php编程软件_php 编程软件 php编程软件有哪些
  11. java 开根号_Java实现开根号运算(不使用数组和String)
  12. cadence17.4 - Checking Hostname and HostID in license file Match Failed
  13. Tivoli TSM产品功能详述
  14. vue导出word纯前端实现
  15. excel单元格内容拆分_自学EXCEL小技巧003→单元格内容拆分
  16. 五句话介绍Hessian序列化
  17. 2CoreIDRAW 软件的实际应用
  18. win7右键菜单管理_win7系统控制面板打印机图标消失如何解决【解决方法】
  19. 电脑桌面便签小工具哪个好用
  20. 我看《谍影重重1、2》

热门文章

  1. 业务与系统的傲慢与偏见
  2. Kali虚拟机和主机的复制粘贴
  3. java calculator类_java里使用面向对象的思想编写一个计算器类(Calculator),可以实现两个数的加、减、乘、除运算...
  4. linux 日志报警,linux日志报警怎么解决
  5. Java #JDK下载以及环境配置
  6. Matlab GUI程序封装成exe文件并在不安装Matlab的电脑上运行
  7. STM32第二课(cubemx,clk,gpio,)
  8. javaScript 上传图片(oss阿里云)
  9. 考研380分什么水平计算机,考研380分属于什么水平 算高分吗
  10. opencv 图像 抠图 算法_opencv提取轮廓与抠图