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...