- 2023 NOI省选 Day1 Day2(云斗学院版数据)
城市建造(cities)题解
- 2023-4-5 20:49:54 @
如果一个点 我们称 是被选择的,在选取 所有点后 可以唯一确定,所以只需要统计有多少种 的选取方式。考虑每个点双联通分量,其中恰好只有一个点被选择或者全部选择(否则一定存在路径 $x\leftrightarrow a\leftrightarrow b\leftrightarrow\cdots \leftrightarrow y$ 其中只有 是被选择的,移除 的边后 仍然联通)。受此启发,可以建立圆方树处理。此外还需要满足圆方树上被选择的点构成一个联通快。每个被选择的圆点对应的剩余联通块大小等于 减去其相邻的被选择的点对应的子树大小。
假设 ,我们会发现联通块大小只能是 或者 ,最多只会有 个,所以我们可以枚举这些大小 ,在树上 DP 求出合法的选择方案 使得每个点对应的联通块大小为 或者 。设 表示只考虑子树 中的点,且 是被选中的合法方案数。对于方点,只需求出每个孩子 的乘积。对于圆点,我们将孩子节点分为三类:子树大小 , 或者 的(称作 A,B,C 类点)。对于 A 类点,只能依附于点 之上,设 表示它们的大小之和;对于 C 类点,只能是独立存在的,只需求出它们 的乘积,记做 ;另外对于 类点,可以选择独立存在,也可以是依附于 上,我们将这类点的数量记做 。如果 是 或 ,则 可以累加一。如果 与子树之外的点大小之和为 或 我们可以把 累加到答案上(强制所有选择方案的贡献在联通块的最上方统计)。之后考虑存在一个 B 类点依附 的情况,此时令 += ,,重复上述统计过程,不难发现所有情况都被考虑到了。
时间复杂度 。另存在 做法。