感覺挺簡單的。就是乙個簡單的dag上的期望問題。
暴力的話是把所有的路徑都算出來,長度加一起再除以總路徑數量。然後優化就是利用期望的線性性(可加性),我們把每條邊的期望算出來,然後再相加就可以了。
顯然求期望=概率*邊長。我們可以考慮先把每個點經過的概率算出來,然後再往邊上轉移。因為是dag,所以我們直接上拓撲排序就可以了。
**如下:
#include#include#include#include#include#include#define maxn 200010
using namespace std;
int n,m,t,cnt;
int head[maxn],chu[maxn],id[maxn],w[maxn],ru[maxn];
double ans;
double val[maxn],node[maxn];
struct edgeedge[maxn<<1];
vectorvec[maxn];
inline void add(int from,int to,int dis)
inline void init()
}}inline void solve(int x)
int main()
node[1]=1.0;
init();
solve(1);
for(int i=1;i<=m;i++) ans+=1.0*w[i]*val[i];
printf("%.2lf\n",ans);
}
bzoj3036 綠豆蛙的歸宿
time limit 2 sec memory limit 128 mb submit 319 solved 224 submit status discuss 給出乙個有向無環的連通圖,起點為1終點為n,每條邊都有乙個長度。綠豆蛙從起點出發,走向終點。到達每乙個頂點時,如果有k條離開該點的道路,綠...
BZOJ 3036 綠豆蛙的歸宿
題意 給定dag帶邊權連通圖,保證所有點都能到達終點n,每個點等概率沿邊走,求起點1到終點n的期望長度。n 10 5。演算法 期望dp 題解 f i 表示到終點n的期望長度。f n 0 f i f j e i w k i i j,k i 是i的出度。因為是點x等概率出發,所以一定要從x算,不能倒著來...
bzoj3036 綠豆蛙的歸宿
題目大意 給定 dag 帶邊權連通圖,保證所有點都能到達終點 n 每個點等概率沿邊走,求起點 1 到終點 n 的期望長度。題解 拓撲,然後倒著 dp 就可以了 卡點 無 c code include define maxn 100010 using namespace std int n,m,oud...