省选 2023 D1T2 城市建造

发布时间 2023-09-04 21:03:14作者: Chy12321

显然地,这 \(t\) 座城市一定由每个连通块出一座得来,换言之,新修建道路的两城市原来一定不连通。

进一步可以想到,若选择了 \(u, v\) 两座城市且它们连通,则 \(u \rightsquigarrow v\) 上的所有城市都应被选择。

更进一步地可以推出,若选择的城市同属一个点双,则该点双内的所有城市都应被选择。

对给定的图建出圆方树,定义一次 选择 操作为:选择该城市(对圆点)或选择该点双内的所有城市(对方点),那么有:

  • 选择的方点构成一个连通块。
  • 删去选择的方点后,剩余的所有连通块大小(圆点数量)的极差不超过 \(k\)

接下来分类考虑解法。

\(k = 0\) 时:

枚举每个连通块的大小 \(s(s | n)\)

首先,必定有树的重心 \(o \in V'\),于是考虑以 \(o\) 为根 树型 DP

证明:

\(o \notin V'\),则 \(g\) 所在的连通块的大小一定 \(> \dfrac n2\),无论 \(k\) 怎么取都不符合题意。

\(f(u)\) 表示 \(u\) 所对应的方点能否被删除,每个连通块的大小为 \(s\) 成立,则一定有 \(f(o) = 1\)

  • 对圆点,若 \(\exist v \in son_o, sz_v \ge k\),则 \(f(u) = 1\),否则 \(f(u) = 0\)。额外地,若 \(f(u) = 0\),则要求 \(\sum\limits_{v \in son_u} sz_v = k\)
  • 对方点,\(f(u) = \prod\limits_{v \in son_o} f(v)\)

时间复杂度 \(\mathcal O(n \sqrt n)\)

\(k = 1\) 时:

枚举 \(s \in [1, \lfloor \dfrac n2 \rfloor]\),则每个连通块的大小 \(\in [s, s + 1]\)

\(f(u)\) 表示以 \(u\) 为根的子树中的方案数,\(v \in son_u\)

  • 对圆点,

    • \(sz_v < s\),则 \(v\) 一定不能删去。
    • \(sz_v > s\),则 \(v\) 一定要删去。
    • 否则有 \(sz_v = s\),那么当 \(f(v) = 0\) 时,\(v\) 一定不能删去,否则 \(v\) 可删可不删,额外地,若不删 \(v\),则需要满足不存在未被删去的 \(v'\)

    \(c\) 为所有可删可不删的 \(\prod f(v)\)

    • \(\sum\limits_{f(v) < s} sz_v + 1 \in [k, k + 1]\),则 \(f(u) \gets c\)
    • \(\sum\limits_{f(v) < s} sz_v = 0\),则 \(f(u) \gets \sum\limits_{sz_v = s \and f(v) > 0} \dfrac c{f(v)}\),又因为满足条件的 \(f(v)\) 势必为 \(1\),所以令 \(T = \sum[sz_v = s \and f(v) > 0]\),则有 \(f(u) \gets Tc\)
  • 对方点,\(f(u) = \prod f(v)\)

最后注意到有算重的情况,需要容斥减掉 \(k = 0\)\(s \in [2, \lfloor \dfrac n2 \rfloor]\)

时间复杂度 \(\mathcal O(n^2 + n \sqrt n)\)

考虑优化,瓶颈在 \(k = 1\) 的情况。

发现对答案有贡献的 \(s\) 必然满足 \(n \bmod s \le \lfloor \dfrac ns \rfloor\),将 \(n \bmod s\) 替换为 \(n - s\lfloor \dfrac ns \rfloor\) 后可以得到 \(n \le (s + 1)\lfloor \dfrac ns \rfloor\),解得 \(s | d\)\((s - 1) | d\),枚举这些 \(s\) 即可。

时间复杂度 \(\mathcal O(n \sqrt n)\)

代码(待补):