Tree (樹上期望dp)

2021-08-10 06:36:51 字數 2512 閱讀 8371

11.2 和 11.3

11.2

考慮1個隨機過程,第1次走到u號點的時間可以分成兩部分,第1部分是從1號點隨機遊走第1次走到u的父親p的時間,第2部分是從p開始走,第1次走到u的時間,由期望的線性性,第1次走到u的時間期望等於這兩部分期望的和。第1部分是乙個子問題,我們考慮怎麼解決第2部分,我們把這個問題變成1棵樹(並且根節點腦袋上也有1條邊),從根節點開始隨機遊走,走出這棵樹期望的時間,我們x[u]表示這個期望,我們對u的子樹中的點也類似地定義x[v],這樣我們可以列出關係式:

其中d是的u度數(包括那根天線),這個關係是中的第乙個1表示直接向上.,後面那個擴號中的三部分,那個1表示從u走向v, x[v]表示從v回來期望時間, x[u]表示這個時候繼續走,走出去還需要花的時間。因為是等概率,所以直接乘以1/d這個概率即可。化簡後是:

即x[u]等於這棵子樹的所有節點度的和,考慮到除了那根天線之外,所有的邊對度的貢獻為2,所以:

這樣,子問題就有了乙個簡單的答案了。我們回到原問題,dp[u]表示第一次走到u的期望時間,p表示u的父親,有:

完美解決了這個問題,複雜度o(n),其實答案都是整數,那三位小數也是來騙你的^_^。

#include 

#include

#include

#include

#include

#define ll long long

#define n 1000010

using namespace std;

int n, idc=0, idx=0;

int head[n], siz[n], fa[n], seq[n];

ll ans[n];

struct edgeed[n];

void adde(int u, int v)

void dfs(int u)

}void dfs2(int u, int fa)

}int main()

dfs( 1 );

ans[1]=1;

dfs2(1,1);

for(int i=1; i<=n; i++)

printf("%lld.000\n", ans[i]);

return

0;}

11.3

從u走到v一定是從u到fa[u], 在到fa[fa[u]], …, 再從u,v的lca一步一步走到v. 那麼如果能夠算出從u到fa[u]的期望步數(設為f[u])和從fa[u]到u的期望步數(設為g[u])就能夠做了.

式子就是在列舉第一步怎麼走來列方程. 化簡發現f[u]和g[u]其實是整數. 先求f,再求g,

然後求lca就可以了.

#include 

#include

#include

#include

#define ll long long

#define n 200010

#define mod 1000000007

#define p 17

using

namespace

std;

int n, q, idc=0, idx=0;

int head[n], siz[n], fa[n], dep[n];

int pw[p+1], acc[n][p+1];

ll ans[n], sum[n];

inline

int read()

while(ch >= '0' && ch <= '9')

return x * f;

}ll up(ll x)

struct edgeed[n<<1];

inline

void adde(int u, int v)

inline

void dfs(int u, int f)

}inline

void dfs2(int u, int f)

}inline

int lca(int x, int y)

int main()

dfs( 1, 1 ); dfs2( 1, 1 );

/*for(register int i=1; i<=n; i++) printf("%d\n", ans[i]);

for(register int i=1; i<=n; i++) printf("%d\n", sum[i]);*/

while ( q-- )

}

樹上期望距離

設 我們分為兩個部分 兒子到父親與父親到兒子。我們先設 f i 為 i 到 fa i 的期望移動步數。顯然,分為兩種情況 對於這種情況,只需要走一步即可到達父親節點,而這種概率為 frac 長度則為 1 那麼貢獻期望長度為 frac 對於這種情況,貢獻期望長度當然為 走到兒子的步數 兒子走到 i 的...

期望及期望dp

簡單說就是概率 概率的價值 osu x 1 3 x3 3x2 3x 1 可以看出每多出乙個1,答案就會增加3x2 3x 1 於是可以維護x和x2的期望 x1 i x1 i 1 1 p i x2 i x2 i 1 2 x1 i 1 1 p i ans i ans i 1 3 x2 i 1 3 x1 i...

期望dp小結

前言 期望dp狀態的定義是較為顯然的,但對於狀態的轉移往往需要一些公式的推導。關鍵的幾點是狀態之間的互通性,和狀態轉移的花費,以及轉移的概率 解決期望dp的幾個技巧如下 e x y e x e y 我們所求的期望可以化為多個步驟的期望累和 相關題目 j,l 在目標確定的情況下,可以得知在目標到達目標...