【題意】給定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#includeview code#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;
}
有邊表的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...