P4316 綠豆蛙的歸宿

2022-03-04 05:10:27 字數 1262 閱讀 1671

「poetize3」

給出乙個有向無環圖,起點為1終點為n,每條邊都有乙個長度,並且從起點出發能夠到達所有的點,所有的點也都能夠到達終點。綠豆蛙從起點出發,走向終點。 到達每乙個頂點時,如果有k條離開該點的道路,綠豆蛙可以選擇任意一條道路離開該點,並且走向每條路的概率為 1/k 。 現在綠豆蛙想知道,從起點走到終點的所經過的路徑總長度期望是多少?

輸入格式:

第一行: 兩個整數 n m,代表圖中有n個點、m條邊 第二行到第 1+m 行: 每行3個整數 a b c,代表從a到b有一條長度為c的有向邊

輸出格式:

從起點到終點路徑總長度的期望值,四捨五入保留兩位小數。

輸入樣例#1: 

4 4 

1 2 1

1 3 2

2 3 3

3 4 4

輸出樣例#1: 

7.00

對於20%的資料 n<=100

對於40%的資料 n<=1000

對於60%的資料 n<=10000

對於100%的資料 n<=100000,m<=2*n

solution:

設$f[i]$表示$i\rightarrow n$的期望距離,那麼$f[u]=\frac^}$,於是我們正著不方便求那就反向嘛!反向建圖後就是乙個簡單的dag遞推了,拓撲排序一下就好了。

**:

#include#define il inline

#define ll long long

#define for(i,a,b) for(int (i)=(a);(i)<=(b);(i)++)

#define bor(i,a,b) for(int (i)=(b);(i)>=(a);(i)--)

using

namespace

std;

const

int n=200005

;int

n,m,to[n],net[n],w[n],h[n],cnt,rd[n],deg[n];

double

f[n];

queue

q;il int

gi()

il void add(int u,int v,int c)

intmain()

}printf(

"%.2lf

",f[1

]);

return0;

}

P4316 綠豆蛙的歸宿

poetize3 給出乙個有向無環圖,起點為1終點為n,每條邊都有乙個長度,並且從起點出發能夠到達所有的點,所有的點也都能夠到達終點。綠豆蛙從起點出發,走向終點。到達每乙個頂點時,如果有k條離開該點的道路,綠豆蛙可以選擇任意一條道路離開該點,並且走向每條路的概率為 1 k 現在綠豆蛙想知道,從起點走...

洛谷P4316 綠豆蛙的歸宿

思路 因為每條邊等概率,那麼就很輕鬆了,我們先跑個拓撲,確定拓撲序之後,從最後乙個點向前更新,初始是f n 0f n 0 f n 0 能到n的點會獲得 w i f n deg u frac deg u w i f n 的期望長度,因為u的度數是deg u deg u deg u 所以有1de g u...

洛谷 P4316綠豆蛙的歸宿

題目描述 記f i 表示經過i號點的概率。那麼點v從點u到達的概率 經過點u的概率 點u的出度。由於v可以由多個點走到,所以f v f u out u 計算f的過程可以在拓撲中完成,同時可以記錄走過這條邊的期望,相加就是答案。include include using namespace std c...