ARC165E
题面
给一棵 \(n\) 个节点的树和一个整数 \(K\)。每次操作,等概率随机选一个所在连通块大小大于 \(K\) 的点,并删掉这个点和与之相连的所有边。重复操作直到图上所有连通块大小不超过 \(K\),求期望操作次数,答案对 \(998244353\) 取模。
\(K< n\le 100\) 。
题解
感觉只能直接摆结论了...
我们不把贡献记录在点上,而是直接用连通块来统计答案。
如何统计?如果你想计算一个连通块的所有答案,那么对于该连通块在删去一个点后会转化为许多其他的连通块,相当于每个连通块都要独立计算,所以就只能状压来实现。
但是我们发现我们并不需要知道某一个连通块具体对答案一共产生了多少贡献,只需要对一个连通块自己对答案产生了多少贡献。
即,如果对于当前局面,存在一个大小为 \(x>k\) 的连通块,无论如何我们一定会删它一次,它无论如何都会造成一次删除代价。所以其实只要我们知道该连通块出现的概率,我们就可以得到它对于问题的贡献。而删这个连通块之后的贡献则可以交给其子连通块统计,所以最终的答案即为所有 \(x>k\) 的连通块出现的概率之和。
如何计算概率?
考虑将问题进行神秘的转化:随机一个长度为 \(n\) 的排列 \(P\),从 \(P_1\) 到 \(P_n\) 依次考虑每一个节点当前所在连通块大小是否 \(>k\),若是则删除,否则不删,求有效删除次数的期望。两个问题是等价的,因为固定了前若干个有效删除位置之后,下一个有效删除位会等概率出现。
设连通块大小为 \(x\),与该连通块相连的节点个数为 \(y\),此时我们可以将统计连通块的出现概率转化为统计在 \(P\) 中 \(x\) 个节点在 \(y\) 个节点之后的概率,即为 \(\frac{x!y!}{(x+y)!}\)。
之后就可以用背包来统计。
启发
- 转化期望的方式很巧妙!也就是在一共连通块分割成其他连通块的时候计算贡献。
- 计算一共连通块出现的概率时也很巧妙!