1 条题解
-
0
题意理解
我们有一棵 个节点的树( 为奇数),进行 次 cut 和 次 link 操作,cut 和 link 交替进行,可以对任意边操作(不要求原树存在的边才能 cut,新加的边也可以 cut,只要图始终是树)。
问:对于每个节点 ,能否通过某种操作顺序,使得最终树以 为重心。
树的重心定义:删除该点后,每个连通块大小 。
因为 是奇数,。
重心的等价条件
设 为 成为重心的条件。
对于节点 ,考虑把它从树中删去,会得到若干连通块。设最大的连通块大小为 ,那么 是重心当且仅当
在静态树中, 等于 $\max\{ \text{subtree sizes of children of } u, \ n - \text{size}[u] \}$。
操作的影响
我们可以 cut 一条边,然后 link 两个不连通的点。 次 cut 和 次 link 意味着我们可以重新连接 条边,即改变 对父子关系。
换句话说,我们可以把原树的一些子树(最多 棵)从它们现在的父节点切下来,接到别的节点下面,从而改变每个节点删除后的最大连通块大小。
思路
对于节点 ,我们希望 。
初始时, 可能大于 ,那么我们必须通过操作,把 减小到 。
由两部分组成:
- (即 的“上方”连通块)
- 的某个子树的 size(下方最大子树)
减小 的方法
如果 ,则这个最大连通块 的大小 。
我们可以尝试把 中的一些节点切出去接到别处,从而减小 的大小。
- 如果 是 的父方向连通块(即 ),那么我们必须从这个连通块中切出一些节点,接到 的子树中(但不能接回 内,否则没变化)。
- 如果 是 的某个子树 ,那么我们可以从这个子树中切出一些节点,接到 的其他子树或者父方向部分。
关键点
一次 cut & link 可以移动一个子树(整棵子树)到别的位置。 次操作可以移动 棵子树。
设 初始为 ,我们需要 。
所以需要移走的最小节点数 = 。
可行性判断
对于节点 ,假设最大连通块是 ,大小为 。
我们需要从 中移走至少 个节点。
但是移走必须是以整棵子树为单位,因为 cut 是切断一条边,移动的是那条边下面的整个子树。
所以我们要看 中是否存在若干子树,它们的 size 之和 ,并且这些子树可以合法移走(即不会破坏树的连通性,并且 次操作足够)。
进一步简化
实际上,对于 ,我们考虑它的所有邻接的子树(包括父方向的“子树” ),找出最大的一块 ,然后看能否用 次操作从 中移走足够的节点。
一次操作可以移走一个子树(该子树与 内其他部分只有一条边相连)。
所以问题变成:在 中,能切出多少棵子树(子树根在 内,但父节点也在 内,这样切掉后 减少该子树大小)?
注意:如果 是父方向连通块,那么 的根是整棵树的根方向,它的子树划分要小心定义。实际上 在 的父方向,那么 的子树就是原树中 的祖先方向的那些分支。
已知结论(根据原题解)
经过分析,最终结论是:
- 对于节点 ,设 是初始最大连通块大小。
- 设 为 (需要减少的大小)。
- 如果 ,则 已经是重心,可行。
- 如果 ,则我们需要从最大块中移走至少 个节点。
- 设最大块是 , 内可以切出的子树大小之和(这些子树在 内,且父节点在 内)为 。
- 如果 且 且 ,则可行;否则不可行。
对于 是 的子树的情况, 就是该子树的所有子树的大小之和(即 的子树森林大小和)。 对于 是父方向的情况, 是 这个连通块中除了包含 的路径外的所有分支的大小和。
算法步骤
- 任选根(比如 1),DFS 计算每个节点的子树大小 。
- 对每个节点 ,计算初始 $m_u = \max( n - \text{size}[u], \max_{v \in \text{children}[u]} \text{size}[v] )$。
- 计算 ,若 ,直接输出 1。
- 否则,找出是哪个连通块 的大小为 :
- 如果是父方向(),那么 = 父方向连通块中所有其他分支的大小和 = (因为父方向连通块去掉 到根的路径后,剩下的分支大小和 = 总大小 - 1)。
- 如果是某个子节点 的子树(),那么 = (因为 子树的所有子树大小和 = )。
- 如果 且 且 ,输出 1,否则输出 0。
样例验证
样例:
7 2 1 2 1 3 1 4 1 5 5 6 6 7,。
以节点 5 为例:
- (5,6,7)
- (父方向)
- 子节点 6 的
- 所以
- 最大块是父方向(大小 4),,且 ,所以可行。
其他节点类似,最终全 1。
总结
这道题的关键是把“节点能否成为重心”转化为“能否通过至多 次子树移动,将最大连通块大小降到阈值以下”,然后利用树的性质快速计算可移动的节点数。
- 1
信息
- ID
- 4005
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 10
- 标签
- 递交数
- 1
- 已通过
- 1
- 上传者