2023.6

发布时间 2023-06-01 23:57:53作者: Cry_For_theMoon

1. Niyaz and Small Degrees

这个题做完才发现是 APIO2021T3 的原题,感觉当时被这套题干爆的时候还近在眼前。

考虑确定 \(x\) 的话有一个比较显然的 dp + 排序后贪心的 \(O(n\log n)\) 解法。

我们考虑如果一条边 \((u,v)\),在 \(x\ge \max\{deg_u,deg_v\}\) 之后就不会删了;如果 \(x\le \min\{deg_u,deg_v\}\) 那我们保留这条边;这样 \(n\) 个时刻的连通块大小显然还是 \(O(n)\) 的,问题就在于介于 \(\min,\max\) 之间,这个时候是一个存在的点挂了一个限制已经无所谓的叶子。

考虑对连通块的每个点做树形 dp,用数据结构维护每个点挂着的额外的叶子(按照 weight 排序),然后合并的时候我们需要一个和额外挂着的叶子的数量无关的做法。

考虑实际上是把两个序列归并起来:一个序列是额外的叶子,一个序列是所有的儿子。

第二个序列的大小是可以接受的,所以我们在他上面二分出到底要选多少个,这样的话我们的数据结构只需要支持 k-th prefix sum 还有 \(\le x\) 的值的个数两个东西,用平衡树去维护即可。

这样时间复杂度是 \(O(n\log^2 n)\) 的。

记录