香蕉OI 染色遊戲(容斥,樹型DP)

2021-10-01 08:34:50 字數 2388 閱讀 4524

恢復訓練。

有一棵樹,節點個數 n

≤1000

n \le 1000

n≤1000

。初始每個點都是白色,每次等概率選乙個點,把他和與他直接相連的點染成黑色。

求將整棵樹染成黑色的期望步數。

首先,設 p

ip_i

pi​ 表示染了 i

ii 次還沒有把整棵樹全部染黑的概率。

所求的答案可以轉化為

∑ i=

0+∞p

i\sum_^p_i

i=0∑+∞

​pi​

因為假如沒有染黑,那麼肯定至少要再多走一步。

假如我們列舉前 i

ii 步被選過的節點集合 s

ss ,ps,

ip_

ps,i

​ 表示 i

ii 次染色,每次選擇的節點組成集合 s

ss ,並且沒有把整棵樹染黑的概率,那麼答案就是

∑ i=

0+∞∑

sps,

i\sum_^\sum_p_

i=0∑+∞

​s∑​

ps,i

​ 然後考慮求 ps,

ip_

ps,i​ 。

對於集合 s

ss, ps,

ip_

ps,i

​ 表示 i

ii 步,每步等概率選集合中的乙個數,將集合內的每個元素至少選一遍的概率。

這個東西可以容斥做,將其轉換為至多 k

kk 個元素至少被選了一遍。

所以最後需要解決的就是樹上大小為 ∣s∣

|s|∣s

∣ 並且選擇這些點並不會染黑整棵樹的集合 s

ss 的個數。樹型 dp 。

答案表示如下

∑ k=

0ncn

tk∑t

=0k(

nm)⋅

(−1)

k−t⋅

∑i=0

+∞(t

n)

i\sum_^cnt_k\sum_^\cdot (-1)^\cdot\sum_^(\frac)^i

k=0∑n​

cntk

​t=0

∑k​(

mn​)

⋅(−1

)k−t

⋅i=0

∑+∞​

(nt​

)i複雜度 o(n

2)

o(n^2)

o(n2) 。

#include

using

namespace std;

const

int n =

1000+10

, m = n <<

1, mod =

998244353

;const

int trans[3]

[3]=

,,};

int n;

int h[n]

, ecnt, v[m]

, nxt[m]

;int fac[n]

, ifac[n]

, inv[n]

;int siz[n]

, f[n]

[n][3]

, tmp[n][3

], a[n]

, ans;

void

_add

(int x,

int y)

intfpow

(int x,

int y)

return ret;

}void

init

(int n)

intc

(int n,

int m)

void

dfs(

int u,

int fa)

}int

main()

memset

(f,0

,sizeof f)

;dfs(1

,0);

for(

int i =

0; i <= n;

++ i)

a[i]=(

(c(n, i)

- f[1]

[i][0]

- f[1]

[i][1]

)% mod + mod)

% mod;

for(

int k =

0; k <= n;

++ k)

ans =

(ans + mod)

% mod;

cout << ans << endl;

return0;

}

葉子的染色(樹型dp)

給一棵m個結點的無根樹,你可以選擇乙個度數大於1的結點作為根,然後給一些結點 根 內部結點和葉子均可 著以黑色或白色。你的著色方案應該保證根結點到每個葉子的簡單路徑上都至少包含乙個有色結點 哪怕是這個葉子本身 對於每個葉結點u,定義c u 為從根結點從u的簡單路徑上最後乙個有色結點的顏色。給出每個c...

CDOJ 1294 天行廖的遊戲 dp 容斥

天行廖的遊戲 一日在喵哈哈村,天行廖和沈寶寶正在玩乙個遊戲。天行廖分別在 n 個紙片上寫上乙個數字,並放到乙個盒子中。現在沈寶寶要從盒子中抓出任意張紙片。如果沈寶寶抓出的紙片上的數字 a a a 滿足 a a a 0 i i i 那麼天行廖贏得這次遊戲的勝利,否則沈寶寶贏。第一行輸入 1 個整數 n...

luogu P2016 戰略遊戲 樹型DP

題目描述 bob喜歡玩電腦遊戲,特別是戰略遊戲。但是他經常無法找到快速玩過遊戲的辦法。現在他有個問題。他要建立乙個古城堡,城堡中的路形成一棵樹。他要在這棵樹的結點上放置最少數目的士兵,使得這些士兵能瞭望到所有的路。注意,某個士兵在乙個結點上時,與該結點相連的所有邊將都可以被瞭望到。請你編一程式,給定...