BZOJ 3036 綠豆蛙的歸宿

2022-04-30 03:24:09 字數 899 閱讀 6586

【題意】給定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算,不能倒著來。

原理:【專題】概率和期望

考慮到深搜的爆棧風險,寫了拓撲排序+期望dp

#include#include

#include

#include

using

namespace

std;

const

int maxn=200010

;int first[maxn],n,m,in[maxn],a[maxn],tot=0,k[maxn],cnt=0;/////////////////////

/double

f[maxn];

queue

q;struct edgee[maxn*2

];void insert(int u,int v,int w)

intmain()

for(int i=1;i<=n;i++)if(!in

[i])q.push(i);

while(!q.empty())

}for(int j=n;j>=1;j--)

if(k[x])f[x]/=k[x];

}printf(

"%.2lf

",f[1

]);

return0;

}

view code

有邊表的tot時,一定要注意不要用變數tot。

bzoj3036 綠豆蛙的歸宿

time limit 2 sec memory limit 128 mb submit 319 solved 224 submit status discuss 給出乙個有向無環的連通圖,起點為1終點為n,每條邊都有乙個長度。綠豆蛙從起點出發,走向終點。到達每乙個頂點時,如果有k條離開該點的道路,綠...

BZOJ3036 綠豆蛙的歸宿

感覺挺簡單的。就是乙個簡單的dag上的期望問題。暴力的話是把所有的路徑都算出來,長度加一起再除以總路徑數量。然後優化就是利用期望的線性性 可加性 我們把每條邊的期望算出來,然後再相加就可以了。顯然求期望 概率 邊長。我們可以考慮先把每個點經過的概率算出來,然後再往邊上轉移。因為是dag,所以我們直接...

bzoj3036 綠豆蛙的歸宿

題目大意 給定 dag 帶邊權連通圖,保證所有點都能到達終點 n 每個點等概率沿邊走,求起點 1 到終點 n 的期望長度。題解 拓撲,然後倒著 dp 就可以了 卡點 無 c code include define maxn 100010 using namespace std int n,m,oud...