联合省选 2023

D2T2

这是 22 年的我:https://www.luogu.com.cn/record/81067862
这是 23 年的我:看我一个流过冲过 A 性质


首先考虑判定。一个经典模型是:如果在 \(T_{i,0}\)\(T_{i,1}\) 之间连一条无向边(若 \(|T_i|=1\) 则认为 \(T_{i,1}=T_{i,0}\)),那么题目转化为给每条边定向,使得每个点的入度不超过 \(1\)。结论是有解当且仅当每个连通块是树或者基环树。这是很容易证明的:由于每条边都会产生 \(1\) 的贡献,从而有 \(|E|\le |V|\);而一个连通块内有 \(|E|\ge |V|-1\),从而我们只需给出树和基环树时的构造即可。当连通块形成一棵树时,取任意一点为根,将其定向为一颗外向树即可;当连通块形成一颗基环树时,则将环上的边定为同一方向,挂在环上的树均定为以环上的的点为根的外向树。

现在我们考虑加入了 Alice 操作后的问题。对树和基环树进行讨论:

基环树

不难发现我们上述给出的构造是唯一可行的构造方案,并且其只会给出两种构造,即只有环上的边的方向会发生改变,而挂在环上的树上的边的方向一定。于是,我们只需解决环上的问题即可。

不妨先给环定序为 \(\operatorname{cyc}_1\to \operatorname{cyc}_2\to \cdots \to \operatorname{cyc}_k\to \operatorname{cyc}_1\)(这里默认 \(k\ge 2\),否则下面做法会有问题),那么对于一条在 \(\operatorname{cyc}_i\)\(\operatorname{cyc}_{i \bmod k + 1}\) 之间的边,对应的 Alice 的 \(S\) 集合有三种可能:

  • \(S\cap \{\operatorname{cyc}_i,\operatorname{cyc}_{i \bmod k + 1}\} = \{\operatorname{cyc}_i\}\)
  • \(S\cap \{\operatorname{cyc}_i,\operatorname{cyc}_{i \bmod k + 1}\} = \{\operatorname{cyc}_{i\bmod k + 1}\}\)
  • \(S= \{\operatorname{cyc}_i,\operatorname{cyc}_{i \bmod k + 1}\}\)

记这三种情况的个数为 \(c_1,c_2,c\),则分类讨论可知答案为 \(\min\left(\min(c_1,c_2)+c,\left\lfloor\frac{c_1+c_2+c}{2}\right\rfloor\right)\)。于是我们解决了基环树时的问题。

这一部分比较困难。

注意到上述构造中,Bob 会选一个点当根并将边定向为一颗外向树。于是,我们将 Bob 给边定向这件事看作是 Bob 选一个点。

现在来看看转化问题后 Alice 的选择会对 Bob 选点时的答案产生怎样的影响。记 \(f_i\) 为 Bob 选 \(i\) 作根时的答案,如果 Alice 在 \((u,v)\) 这条边对应的 \(S\) 集合中选择了 \(u\),则不难发现 \(v\) 一侧的所有点(包括 \(v\))的 \(f\) 值都会 \(+1\),反之亦然。而又注意到 \(S_i\neq T_i\) 时 Alice 总是存在唯一的不劣选法,则问题进一步变为给定 \(f\),需要 Alice 在一些边中选择给两侧点集中的某一个 \(f\) 值全部 \(+1\),最大化 \(\min f\)

一个关键性质是:记 \(V_i\) 为第 \(i\) 条边中 Alice 选的点,则有 \(\forall i,j,V_i\cap V_j\neq \varnothing\)。这并不难证明:考虑反证,若 \(V_i\cap V_j=\varnothing\),则将这两条边中 Alice 选的点反过来使 \(V_i\gets \complement_V V_i\) 总是不劣的。由于这是在树上,那进一步则有 \(\cap_i V_i\neq \varnothing\)

于是我们枚举 \(u\in \cap_i V_i\),这样容易发现 Alice 需要选择的每一条边,都会选择以 \(u\) 为根时深度较大的点。注意到对每次对 \(f\) 的贡献在 dfs 序上形如一或两段区间,因此在换根枚举 \(u\) 的同时维护一个线段树即可做到 \(\Theta(n\log n)\)

D1T2

\(t\) 个连通块最小大小为 \(x\),则每个连通块大小都在 \([x, x + k]\) 之间。我们先考察 \(x\) 的取值:当 \(k = 0\),显然必须有 \(x \mid n\);当 \(k=1\) 时,则至少存在一个 \(t\) 使得 \(tx \le n < t(x+1)\),也即 \(x = \lfloor \frac{n}{t} \rfloor\)。根据经典结论,\(\lfloor \frac{n}{i} \rfloor\) 的取值只有 \(O(\sqrt n)\) 个。

接下来考虑树怎么做。

结论:选出的点集 \(V'\) 在图上一定是一个连通块,而且包含树的任一重心 \(R\)

前半句话很好理解,若 \(V'\) 在图上不连通,那么分出来的连通块一定小于 \(|V'|\) 个。后半句话,我们考虑反证:取 \(R\) 为树根,由于 \(V'\) 是一个连通块且不包含 \(R\),因此其必定在 \(R\) 的某一个儿子的子树中。由于 \(R\) 是重心,这个子树的大小不大于 \(\lfloor \frac{n}{2} \rfloor\),从而 \(R\) 所在的连通块大小不小于 \(n - \lfloor \frac{n}{2} \rfloor +1 > \lfloor \frac{n}{2} \rfloor+1\)。而其余连通块大小之和为 \(\lfloor \frac{n}{2} \rfloor - 1\),两者之差显然大于 \(1\),从而导出矛盾。

于是我们有了一个做法:先枚举 \(x\)。记 \(f_u\)\(u\) 子树内(\(u\) 强制选)的方案数,所求即为 \(f_R\)。考虑 \(u\) 的每个子树 \(v\) 和它们的大小 \(siz_v\)

  • \(k=0\) 时:

    • \(siz_v<x\),则 \(siz_v\) 必须划入 \(u\) 所在连通块,即 \(v\) 不能选,记 \(s\) 为这一类点的 \(siz_v\) 之和。
    • \(siz_v\ge x\),则 \(v\) 必须和 \(u\) 在不同的连通块,即 \(v\) 必须选,记 \(t\) 为这一类点的 \(f_v\) 之积。

    则有 \(f_u = [s + 1 = x] t\)

  • \(k=1\) 时:

    • \(siz_v<x\),则 \(v\) 不能选,记 \(s\) 为此类 \(siz_v\) 之和。
    • \(siz_v=x\),继续讨论 \(f_v\) 的取值。若 \(f_v=0\),则 \(v\) 依旧不能选,\(s\) 同样要加上 \(siz_v\);否则 \(v\) 可选可不选,选也最多选一个,记这一类 \(v\) 所构成的集合为 \(S\),都不选造成的贡献为 \(mul = \prod_{v \in S} f_v\) 选一个所造成的贡献即为 \(mut = mul \left( \sum_{v\in S} \frac{1}{f_v} \right)\)。动态维护 \(mul, mut\)
    • \(siz_v>x\),则 \(v\) 必须选,记 \(t\) 为这一类点的 \(f_v\) 之积。

    则有 \(f_u = [s + 1 \in [x, x + k]] mul + [s = 0] mut\)

这样我们就在 \(O(n \sqrt n)\) 的复杂度内解决了树的问题。

如何将其扩展到图上呢?只需注意到一个点双要么不选,要么只选一个,要么全选。这一结论的证明同样简单:考虑反证,若存在一个点双 \(S\) 选了多于一个但没全选,那么我们取一条边 \((u, v) \in S\),且 \(u\) 选了 \(v\) 没选。再任取 \(w \in S, w \neq u\),由于 \(S\) 是点双,因此一定存在一条从 \(w\) 开始到 \(v\) 不经过 \(u\) 的路径。记这条路径上最接近 \(v\) 的选了的点为 \(p\),则 \(p\)\(u\) 同属于一个连通块,从而连通块数不足 \(|V'|\) 个。

根据上述性质,我们可以将问题转化为在原图的圆方树上选一些连通的圆点(这里的连通指若 \(u, v\) 选了,则 \(u, v\) 路径上的所有圆点都得选),使得分出来的每个连通块的圆点个数之差不超过 \(k\)。我们只需将 \(siz_v,R\) 中子树大小的定义改为子树中圆点个数,并取方点 \(u\)\(f_u = \prod_{v \in son(u)} f_v\) 即可。复杂度 \(O(n\sqrt n)\)

posted @ 2023-08-12 13:19  zhouyuhang  阅读(42)  评论(0)    收藏  举报