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

来源:互联网 发布:directx 11 编程 编辑:程序博客网 时间:2024/06/10 05:37

题目大意:

一个无向图,节点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++源程序:


原创粉丝点击