求期望要用到全期望公式來來分類討論:
k[i]:表示死掉回到1的概率
e[i]:表示成功逃走的概率
那麼我們設定隨機變數x:在節點i處開始,逃走所走的邊數
那麼e[i]就是從節點i開始,要逃走的邊數的期望
如果i是葉子節點:
e[i] = k[i]*e[1] + e[i]*0 + (1-k[i]-e[i])*(e(parent(i))+1); (1)
如果i不是葉子節點:
與i相連的節點的總數為m,j是i的孩子節點
e[i] = k[i]*e[1] + e[i]*0 + (1-k[i]-e[i])/m*(e(parent(i))+1) + (1-k[i]-e[i])/m*sum(e[j]+1); (2)
為了簡化計算過程,我們設ai = k[i] , bi = (1-k[i]-e[i])/m , ci = bi*sum(e[j]+1)+bi;
那麼e[i] = ai*e[1] + bi*e[p]+ ci; (3)
匯出e[j] = aj*e[1] + bj*e[i] + cj; (4)
進而得到sum(e[j]) = sum ( aj*e[1] + bj*e(i) + cj ) (5)
把(5)代入到(3)中得到
e[i] = ai*e[1] + bi*e[p] + bi*sum(aj*e[1] + bj*e[i] + cj + 1 ) + bi (6)
=>(1-(1-ki-ei)/m*sum(bj))*e(i)=(ki+(1-ki-ei)/m*sum(aj))*e(1)+(1-ki-ei)/m *e(father)+(1-ki-ei+(1-ki-ei)/m*sum(cj));
所以與上述2式對比得到:
ai=(ki+(1-ki-ei)/m*sum(aj)) / (1-(1-ki-ei)/m*sum(bj))
bi=(1-ki-ei)/m / (1-(1-ki-ei)/m*sum(bj))
ci=(1-ki-ei+(1-ki-ei)/m*sum(cj)) / (1-(1-ki-ei)/m*sum(bj))
所以ai,bi,ci只與i的孩子aj,bj,cj和本身ki,ei有關
於是可以從葉子開始逆推得到a1,b1,c1
在葉子節點:
ai=ki;
bi=(1-ki-ei);
ci=(1-ki-ei);
而e(1)=a1*e(1)+b1*0+c1;
=>e(1)=c1/(1-a1);
當a趨近於1時,那麼無解,精度卡到1e-9才能過
#include #include #include #include #include #define max 10007
#define eps 1e-9
using namespace std;
int t,n,x,y;
double k[max],e[max],a,b,c;
struct edge
edge[max<<1];
int head[max];
int cc;
void add ( int u , int v )
void dfs ( int u , int p )
if ( p != -1 ) m++;
t = (1-k[u]-e[u])/m;
a = (k[u]+t*a)/(1-t*b);
b = t/(1-t*b);
c = (1-k[u]-e[u]+t*c)/(1-t*b);
}int main ( )
for ( int i = 1 ; i <= n ; i++ )
dfs ( 1 , -1 );
printf ( "case %d: " , case++ );
if ( fabs( a-1 ) < eps )
puts ( "impossible");
else printf ( "%.6lf\n" , c/(1-a) );
}}
hdu4035 樹上概率dp
從葉子到根,帶入公式求引數 kuangbin hdu 4035 dp求期望的題。題意 有n個房間,由n 1條隧道連通起來,實際上就形成了一棵樹,從結點1出發,開始走,在每個結點i都有3種可能 1.被殺死,回到結點1處 概率為ki 2.找到出口,走出迷宮 概率為ei 3.和該點相連有m條邊,隨機走一條...
HDU 4035 Maze 樹形概率DP
題意 一棵樹,從結點1出發,在每個結點 i 都有3種可能 1 回到結點1 概率 ki 2 結束,概率 ei 3 隨機走一條邊。ki ei 隨機走 1 求到結束需要走的邊數的期望。假設e i 為點i到結束走邊數的期望,則有 以下m為點的度數 e i ki e 1 1 ei ki m e fa i 1 ...
hdu 4035 Maze (概率與期望DP)
題目描述 一棵樹,乙個人初始在1號點。每次到達乙個點,有ki的概率被殺死,並且回到1號點,有ei的概率直接逃離,然後等概率的逃到與他相鄰的節點 1 ki ei du i 每次移動步數 1。求逃出去的期望步數。這道題與上面題的思想和方法是類似的。我們先假設逃離是到達節點0,那麼e 0 0,倒著推。對於...