CF1025G Company Acquisitions

CF 传送

洛谷传送

咕咕咕。总之是非常牛的题,完全不会!进行题解大学习。

猜完结论直接证对我这种猜不到的蒟蒻非常不友好,于是大力复习势能分析好吧快忘光光了。

首先我们发现这个归属状态是可以循环的!这非常不友好,我们要想办法扔掉循环节。

怎么扔掉循环呢?一个办法是构造一个映射 \(f:\{\text{状态集合}\}\to \mathbb{R}\),把一个状态映射成一个数。如果状态 \(S\) 操作一次之后有 \(p_i(1\le i\le k)\) 的概率变成状态 \(S_i\),我们要想办法让 \(f(S)+1=\sum_{i=1}^{k}p_if(S_i)\),并且终止态(本题即为仅剩一个活跃公司的情况)为值域最大值。

然后就是考虑怎么构造这个东西。这需要一些练习,和一些运气。

*你获得了加成【好运 III】,这使你充满了决心*

好的那么我们注意到这里的状态集合其实只和每个点的子树大小有关,子树大小相同的状态是等价的,所以我们考虑基于子树大小来定义,我们会想到:

  • 给每个子树大小设一个值,加起来不就好了!!

于是我们想到了令 \(f(S)=\sum_{i\in S} g(siz_i)\),接下来考虑如何确定 \(g\)

我们发现每次操作只会影响两个 \(S\) 中的点,于是我们设这两个点的子树大小分别为 \(a,b\),然后计算修改的贡献。我们希望:

\[g(a)+g(b)+1=\frac{1}{2}[g(a+1)+(b-1)g(1)]+\frac{1}{2}[g(b+1)+(a-1)g(1)] \]

我们发现这个 \(g(1)\) 非常烦人!但是我们只需要计算增量就好了,值域是可以平移的!所以我们直接进行平移,让 \(g(1)=0\)。于是式子变成了:

\[g(a)+g(b)+1=\frac{1}{2}[g(a+1)+g(b+1)] \]

接下来动用我们的函方大法,令 \(a=b\),于是 \(2g(a)+1=g(a+1)\),随便归纳一下就知道 \(g(a)=2^{a-1}-1\),每次操作期望将 \(f\) 加一,因此期望的操作数就是 \(f(\text{终止态})-f(\text{初始态})\),然后直接算就完事了。

posted @ 2025-09-16 17:27  Xuan_tmp  阅读(11)  评论(0)    收藏  举报