「poetize3」
給出乙個有向無環圖,起點為1終點為n,每條邊都有乙個長度,並且從起點出發能夠到達所有的點,所有的點也都能夠到達終點。綠豆蛙從起點出發,走向終點。 到達每乙個頂點時,如果有k條離開該點的道路,綠豆蛙可以選擇任意一條道路離開該點,並且走向每條路的概率為 1/k 。 現在綠豆蛙想知道,從起點走到終點的所經過的路徑總長度期望是多少?
輸入格式:
第一行: 兩個整數 n m,代表圖中有n個點、m條邊 第二行到第 1+m 行: 每行3個整數 a b c,代表從a到b有一條長度為c的有向邊
輸出格式:
從起點到終點路徑總長度的期望值,四捨五入保留兩位小數。
輸入樣例#1: 複製
4 41 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
直接利用期望的定義推就行。
不過正著推非常不好寫
我是建反圖推的
//luogu-judger-enable-o2
//luogu-judger-enable-o2
#include#include
#include
#include
#include
#include
#define ll long long
using
namespace
std;
const
int maxn = 200000, inf = 1e9 + 10
;inline
intread()
while(c >= '
0' && c <= '
9') x = x * 10 + c - '
0', c =getchar();
return x *f;
}int
n, m;
struct
edge e[maxn];
int head[maxn], num = 1
;inline
void addedge(int x, int y, int
z) ;
head[x] = num++;
}double
inder[maxn], dis[maxn], inder2[maxn];
void
topsort()
//dis[p] /= inder2[p];
//printf("%d %lf %lf\n", p, dis[p], inder2[p]);}}
main()
topsort();
printf(
"%.2lf
", dis[1
]);
return0;
}
洛谷P4316 綠豆蛙的歸宿 期望DP
時空限制 1000ms 128mb 題目描述 給出乙個有向無環圖,起點為1終點為n,每條邊都有乙個長度,並且從起點出發能夠到達所有的點,所有的點也都能夠到達終點。綠豆蛙從起點出發,走向終點。到達每乙個頂點時,如果有k條離開該點的道路,綠豆蛙可以選擇任意一條道路離開該點,並且走向每條路的概率為 1 k...
洛谷 P4316 綠豆蛙的歸宿 期望dp
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...