ARC115F Migration
题意 : 给出一棵
树上有
给出石子的初始位置,你的目标是将第
考虑二分。
记
记
不难发现,由于操作的可逆性,
问题转化为求
根据操作的可逆性,若
那么,我们每次找出一个可达的
为了便于维护,我们每次只考虑一个石子的连续移动,将这个石子(合法地)移动到一个
可以证明,若不存在这种方案,则不存在任意
显然这样的移动最多
我们需要快速求解 : 从
然后再用堆维护每个石子的最小出边即可。
可以发现其实不用二分,只需每次挑一步最大不稳定度最小的转移。
记
这样,我们对每个
当我们移动
这样的复杂度为
建立一张新图,对于
贪心时,每次走
性质 :若
,则有 。也就是说,在新树上越浅边权越大。 证明 :
的分布如下图:(其他一些情况可以视为该图的退化) 记
。 若
最大或 最大:此时 , 选择 ,矛盾。 因此只可能是
最大,则 . 结合 则有 。
于是,我们可以直接给边按
这里我们可能同时移动多个石子,用 xor Hash 维护集合特征,并记一个集合大小以计算不稳定度的变化。
可以把二分加回来以简化实现。
复杂度