hdu4035 Maze 期望dp 數學

2022-02-27 14:24:13 字數 2430 閱讀 3664

bzoj4035

神題啊。。。orz

不過網上題解好難看,數學推導不寫\(latex\)怎麼看。。【latex中毒晚期】

我們由題當然能很快寫出\(dp\)方程

設\(f[i]\)表示從\(u\)出發逃離的期望步數,\(m\)為該點度數

\[\begin

f[u] &= k_uf[1] + \frac\sum\limits_ (f[v] + 1)\\

&= k_uf[1] + \fracf[fa[u]] + \frac\sum\limits_ f[v] + (1 - k_u - e_u)\\

\end

\]然後就會發現這個方程似乎有後效性,立即想高斯消元

一看範圍\(n \le 10^4\)什麼鬼嘛qaq。。。

題解是這麼說的:

我們設\[f[u] = a_uf[1] + b_uf[fa[u]] + c_u

\]對於葉子節點,顯然有

\[\begin

a_u &= k_u \\

b_u &= 1 - k_u - e_u \\

c_u &= 1 - k_u - e_u \\

\end

\]對於非葉節點,我們展開\(f[v]\)

\[\begin

f[u] &= k_uf[1] + \fracf[fa[u]] + \frac\sum\limits_ f[v] + (1 - k_u - e_u)\\

&= k_uf[1] + \fracf[fa[u]] + \frac\sum\limits_ (a_vf[1] + b_vf[u] + c_v) + (1 - k_u - e_u)\\

\end

\]\[f[u] = \frac\sum a_v}\sum b_v}f[1] + \frac}\sum b_v}f[fa[u]] + \frac\sum c_v}\sum b_v}\]故

\[\begin

a_u &= \frac\sum a_v}\sum b_v} \\

b_u &= \frac}\sum b_v} \\

c_u &= \frac\sum c_v}\sum b_v} \\

\end

\]然後由於

\[\begin

f[1] &= a_1f[1] + b_1 \times 0 + c_1 \\

f[1] &= \frac

\end

\]當\(1 - a_1 = 0\)時無解

否則我們能直接計算出\(f[1]\),即為所求

是不是很神奇?

這個式子的推導主要是利用了式子中有\(f[fa[u]]\)這一項,從而可以從兒子中遞推出父親的資訊

#include#include#include#include#include#include#define redge(u) for (int k = h[u],to; k; k = ed[k].nxt)

#define rep(i,n) for (int i = 1; i <= (n); i++)

#define mp(a,b) make_pair(a,b)

#define cls(s) memset(s,0,sizeof(s))

#define cp pair#define ll long long int

#define eps 1e-10

using namespace std;

const int maxn = 10005,maxm = 100005,inf = 1000000000;

inline int read()

while (c >= 48 && c <= 57)

return out * flag;

}int n,h[maxn],ne,de[maxn],fa[maxn];

struct edgeed[maxn << 1];

void build(int u,int v); h[u] = ne;

ed[++ne] = (edge); h[v] = ne;

de[u]++; de[v]++;

}double a[maxn],b[maxn],c[maxn],k[maxn],e[maxn];

int dfs(int u)

double m = de[u],tmp = 0;

a[u] = k[u];

b[u] = (1 - k[u] - e[u]) / m;

c[u] = 1 - k[u] - e[u];

redge(u) if ((to = ed[k].to) != fa[u])

if (fabs(1 - tmp) < eps) return false;

a[u] /= (1 - tmp); b[u] /= (1 - tmp); c[u] /= (1 - tmp);

return true;

}int main()

return 0;

}

hdu 4035 Maze (概率與期望DP)

題目描述 一棵樹,乙個人初始在1號點。每次到達乙個點,有ki的概率被殺死,並且回到1號點,有ei的概率直接逃離,然後等概率的逃到與他相鄰的節點 1 ki ei du i 每次移動步數 1。求逃出去的期望步數。這道題與上面題的思想和方法是類似的。我們先假設逃離是到達節點0,那麼e 0 0,倒著推。對於...

HDU 4035 Maze 樹形概率DP

題意 一棵樹,從結點1出發,在每個結點 i 都有3種可能 1 回到結點1 概率 ki 2 結束,概率 ei 3 隨機走一條邊。ki ei 隨機走 1 求到結束需要走的邊數的期望。假設e i 為點i到結束走邊數的期望,則有 以下m為點的度數 e i ki e 1 1 ei ki m e fa i 1 ...

hdu 4035 經典概率dp求期望

求期望要用到全期望公式來來分類討論 k i 表示死掉回到1的概率 e i 表示成功逃走的概率 那麼我們設定隨機變數 在節點i處開始,逃走所走的邊數 那麼e i 就是從節點i開始,要逃走的邊數的期望 如果i是葉子節點 e i k i e 1 e i 0 1 k i e i e parent i 1 1...