p4316 綠豆蛙的歸宿
題目中說明本題的圖是乙個有向無環圖,即dag
dagda
g圖。分析題目,我們可以想到這是一道期望dp題目,而針對一張圖進行遞推或者dpdp
dp,首先進行拓撲排序,將圖的結點變成乙個序列,然後再應用遞推或者dpdp
dp等演算法。
我們可以設狀態f[x
]f[x]
f[x]
表示點x
xx到終點n
nn所經過的路徑的期望長度,若從x
xx出發有k
kk條邊,分別到達y
iy_i
yi,邊長分別為z
iz_i
zi,則根據數學期望的定義和性質可得:f[x
]=1k
∑i=1
k(f[
yi]+
zi
)f[x]=\frac\sum_^(f[y_i]+z_i)
f[x]=k
1i=
1∑k
(f[y
i]+
zi)
顯然,終點到其本身的期望值為零,所以:
邊界f [n
]=
0f[n]=0
f[n]=0
目標:f[1
]f[1]
f[1]
首先拓撲排序,然後逆序找到n
nn,開始逆序進行dpdp
dp。
#include
#include
using
namespace std;
inline
intread()
while
(c >=
'0'&& c <=
'9')
return f * x;
}const
int maxn =
200050
;int n,m,cnt,h[maxn]
;int top,num,dg[maxn]
,indgr[maxn]
,sta[maxn]
,ans[maxn]
;double f[maxn]
;//f[x]表示x點到終點n的期望路徑總長
struct node
edg[maxn]
;void
add(
int u,
int v,
int val)
void
tps(
)//拓撲排序,ans儲存答案 }}
voiddp(
)}}int
main()
tps();
dp();
printf
("%.2lf\n"
,f[1])
;return0;
}
對圖進行dpdp
dp等演算法要先使用拓撲排序
合理判斷dpdp
dp的正序、逆序
P4316 綠豆蛙的歸宿
poetize3 給出乙個有向無環圖,起點為1終點為n,每條邊都有乙個長度,並且從起點出發能夠到達所有的點,所有的點也都能夠到達終點。綠豆蛙從起點出發,走向終點。到達每乙個頂點時,如果有k條離開該點的道路,綠豆蛙可以選擇任意一條道路離開該點,並且走向每條路的概率為 1 k 現在綠豆蛙想知道,從起點走...
P4316 綠豆蛙的歸宿
poetize3 給出乙個有向無環圖,起點為1終點為n,每條邊都有乙個長度,並且從起點出發能夠到達所有的點,所有的點也都能夠到達終點。綠豆蛙從起點出發,走向終點。到達每乙個頂點時,如果有k條離開該點的道路,綠豆蛙可以選擇任意一條道路離開該點,並且走向每條路的概率為 1 k 現在綠豆蛙想知道,從起點走...
P4316 綠豆蛙的歸宿 數學期望
正題 評測記錄 大意 乙個有限無環圖,綠豆蛙從乙個點走向任何一條出邊的概率都是一樣的,求起點到終點路徑的期望長度。解題思路 有向無環圖,我們考慮在拓撲序上dp,我們可以設乙個點的期望長度是f if i fi 然後我們可以發現,因為走任何一條邊的概率是一樣的,而從任何一條邊走過來的概率是一樣是我們會更...