題目需要求訪問完所有點(假設有 \(n\) 個)的期望步數,也就是要求
\[e(\max\)
\]這裡 \(x_1\)、\(x_2\)、\(\cdots\)、\(x_n\) 表示第一次到達對應編號的關鍵點的時間。
根據min-max
容斥,有
\[e(\max\)=e(\max\)=e\left(\sum_(-1)^\min\\right)=\sum_(-1)^e(\min\)(s'\ne\phi)
\]最後一步等號根據期望的線性性。
對於某乙個集合 \(s\),設 \(f_u\) 表示從節點 \(u\) 開始,第一次到達任意給定點期望步數。根據期望dp
:當 \(u\in s\) 時
\[f_u=0
\]當 \(u\not\in s\) 時
\[f_u=\frac1\left(f_+\sum_f_v\right)+1
\]直接高斯消元複雜度很劣。注意到這是一棵樹。
根據線性代數的知識,使用待定係數法。令 \(f_u=k_uf_+b_u\),轉化下原式
\[\begin
&f_u=\frac1\left(f_+\sum_k_vf_u+b_v\right)+1\\
&\rightarrow deg_uf_u=f_+f_u\sum_k_v+\sum_b_v+deg_u\\
&\rightarrow f_u\left(deg_u-\sum_k_v\right)=f_+\sum_b_v+deg_u\\
&\rightarrow f_u=\frac1k_v}f_+\fracb_v}k_v}
\end
\]因此有
\[\begin
\begin
k_u&=\frac1k_v}\\
b_u&=\fracb_v}k_v}
\end
\end
\]當 \(u \in s\) 時,\(k_u=b_u=0\)。
可以使用dp
求係數。由於本題的特殊性(\(n\) 很小,或者題目***),不存在分母為模數的倍數的情況。故求出係數,複雜度為 \(\mathcal o(n\log p)\),注意要求逆元。總共要求 \(2^n\) 種情況,故複雜度為 \(\mathcal o(n2^n\log p)\)。
預處理所有詢問,發現實際上是乙個子集列舉,使用fwt
優化即可。注意係數。這部分複雜度 \(\mathcal o(n2^n)\)。總複雜度為 \(\mathcal o(n2^n\log p)\)。
#include const int n = 19, p = 998244353;
int n, q, x;
struct edge e[n * 2];
int g[n], edges = 0;
void adde(int u, int v) ; g[u] = edges - 1;
}int inc(int a, int b)
int qpow(int a, int b)
int k[n], b[n];
void dfs(int u, int f, int s)
int deg = f ? 1 : 0, k = 0, b = 0;
for (int i = g[u], v; ~i; i = e[i].nxt)
if (v = e[i].v, v != f)
dfs(v, u, s), deg++, k = inc(k, k[v]), b = inc(b, b[v]);
k[u] = qpow(inc(deg, p - k), p - 2);
b[u] = 1ll * k[u] * (deg + b) % p;
}int a[1 << n];
void fwt(int *a, int n, int op)
int main()
for (int s = 1; s < 1 << n; s++)
fwt(a, 1 << n, 1);
while (q--)
return 0;
}
PKUWC2018 隨機遊走
loj 2542.pkuwc 2018 隨機遊走 最值反演 樹上期望dp 其實不是很難啦 min max容斥既視感 設f x 表示從x走到s中第乙個點的期望步數 f x 1 d x f fa x 1 d x f ch x 1 這個有環 利用f x a f fa x b的套路代換 得到a,b的遞推式 ...
PKUWC2018 隨機演算法
題意 給定乙個圖 n 20 定義乙個求最大獨立集的隨機化演算法 產生乙個排列,依次加入,能加入就加入 求得到最大獨立集的概率 本質就是計數題 每個點有三種狀態 考慮過且在獨立集中,考慮過未在獨立集中,未考慮 本來在集合裡的點不能知道有哪些,而且不能加入的點的排列也不好確定。乙個好的方法是 把考慮過的...
PKUWC2018 隨機演算法
題目 思博狀壓寫不出是不是沒救了呀 首先我們直接狀壓當前最大獨立集的大小顯然是不對的,因為我們的答案還和我們考慮的順序有關 我們發現最大獨立集的個數好像不是很多,可能是 o n 級別的,於是我們考慮從這個方面入手 我們求出所有的最大獨立集,考慮求出有多少種考慮順序能夠恰好得到這個最大獨立集 設當前已...