【USACO Contest】Holiday 2010 Bonus Competition, Problem 3: Driving Out the Piggies (dotp)

博客详细介绍了USACO竞赛2010年Holiday Bonus问题3的解决方法。问题涉及概率计算和图论,给出了一种使用矩阵和线性方程组来解决炸弹在无向图中各节点爆炸概率的问题。通过高斯消元法求解C++程序,最终得出每个节点上炸弹爆炸的概率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目大意:

一个无向图,节点1有一个炸弹,在每个单位时间内,有可能在这个节点炸掉,也有p/q的概率随机选择一条出去的路到其他的节点上。问最终炸弹在每个节点上爆炸的概率。

 

分析:

一看就知道是跟矩阵有关系的。

一些基本常识:

图的邻接矩阵(i与j之间有路为1,无路为0)自己与自己相乘N次的结果中[i,j]的值就是到达[i,j]的长度为N的不同路径的种类数。

于是可以想到:

构造矩阵M,使得M[i,j]为炸弹上一个时间在j点、下一个时间走到i的概率,则M自己与自己相乘N次的结果M'的[i,j]就是最初在i点,N时间过后走到j点的概率。

则M'的第一列就是从节点1出发到其他各个节点的概率。设为列向量A。则A=M'*B,其中B=(1,0,0,0,...)T

在时间N过后,炸弹在每个节点爆炸的概率设为列向量PN


时间0:P0 = p/q * B

时间1:P1 = p/q * M * B

时间N:PN = p/q * MN * B


我们要求的结果就是 Ans=P0 +P1 +P2 +P3 +......

根据无穷递缩等比数列求和公式,Ans=p/q * (I-M)-1 *B

 

(I-M) * Ans = p/q * B。

 

这是一个线性方程组,用高斯消元的方法可解。

 

C++源程序:


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值