CF1025G Company Acquisitions [* hard]
有一棵菊花树森林,每次操作为随机选择两棵树,然后随机将其中一棵的根作为另一棵菊花树的根节点的儿子,然后断开它和它所有儿子的边。
求这样操作下去,最后他们变成一棵大菊花树的期望次数。
(nle 500),每个点是根或者是 (x) 的儿子给出。
Solution
神仙题。
考虑更抽象的描述这个题,给定一个序列 (a),保证 (sum a_i=n),每次操作为选择两个点,然后将其中一个变成 (a_i-1) 个 (1),将另一个 (+1)
接着,本题有一个有趣的事实在于,最后的终止局面一定是固定的,初始局面是给定的,我们希望存在一个描述局面的势能函数 (F(S)) 满足期望意义下,每次操作一定会使得 (F(S)) 增加 (1),假设答案就是 (F(S_{end})-F(S_{begin}))
对于本题,我们不妨设 (f(x)) 表示当有 (x+1) 个点的时候的菊花树的势能函数,同时规定 (F(S)=sum f(a_i))
现在考虑每次操作,对势能函数的影响,不难发现改变量即:
[frac{1}{2}(f(a+1)+(b-1)f(0)+f(b+1)+(a-1)f(0))-f(a)-f(b)=1
]
如果规定 (f(0)=0),那么就有:
[frac{f(a+1)+f(b+1)}{2}-f(a)-f(b)=1
]
由于需要对任意 (a,b) 成立,所以这应该是一个统一的关系,所以有 (frac{f(a+1)}{2}-f(a)=frac{1}{2})
所以 (f(a+1)=1+2f(a))
不难得到 (f(x)=2^x-1) 的答案。
所以最终局面为 (f(n-1)),得到答案是 easy 的。