綠豆蛙的歸宿
time limit:10000ms memory limit:165536k
total submit:3 accepted:1
case time limit:1000ms
description
給出乙個有向無環的連通圖,起點為1終點為n,每條邊都有乙個長度。綠豆蛙從起點出發,走向終點。
到達每乙個頂點時,如果有k條離開該點的道路,綠豆蛙可以選擇任意一條道路離開該點,並且走向每條路的概率為 1/k 。
現在綠豆蛙想知道,從起點走到終點的所經過的路徑總長度期望是多少?
input
第一行: 兩個整數 n m,代表圖中有n個點、m條邊
第二行到第 1+m 行: 每行3個整數 a b c,代表從a到b有一條長度為c的有向邊
output
從起點到終點路徑總長度的期望值,四捨五入保留兩位小數。
sample input
4 41 2 1
1 3 2
2 3 3
3 4 4
sample output
7.00
這題題目比較弱dfs就可以過…資料也比較仁慈1可以到所有點
我則是拓撲排序然後算期望長度,記p[i]表示到i點的概率,d[i]為i的出度,r[i]為i的入度,跟新p[son]+=p [i]/d[i],ans[son]+=p[i]/d[i]*v+ans[i]/d[i]
#include#include#include#include#include#includeusing namespace std;
const int maxn = 1100000;
int now[maxn], son[maxn], v[maxn], pre[maxn];
int tot, d[maxn], r[maxn], n, m;
void cc(int a, int b, int c)
void init()
}void work()
} printf("%.2lf\n", ans[n]);
}int main()
綠豆蛙的歸宿
兩種方法,正推和逆推 逆推 dp i 表示從 i 到 n 的期望,方程的轉移 對於一條從 x 到 y 邊 dp x sum limits dp y edge i oud x 正推 dp i 表示從 1 到 i 的期望,g i 表示從 1 到 i 的概率,方程的轉移 對於一條從 x 到 y 的邊 dp...
綠豆蛙的歸宿
link emm,題目本身並不見得很難,主要是有乙個點必須理清楚。期望dp的計算需要遵守全期望公式,大概是 e sum limits i m p i times c i 也就是說你在搞清楚乙個東西對於期望的貢獻的同時還應該要知道它產生貢獻的概率。這也就回答了為什麼本題中只能逆推而不能順推的問題。畢竟...
Joyoi 綠豆蛙的歸宿
題鏈 題解 期望dp,拓撲序 定義dp i 表示從i點到n點的期望距離。令cnt u 表示u的出度。顯然 dp u sum dp v e 邊權 frac 由於是個dag,所以拓撲排序後,從後向前dp即可。題外話 為何不能正向dp 希望聰明可愛的泥萌能看懂接下來的分析 好吧,其實正向dp是可以的,但是...