ABC399 G - Colorful Spanning Tree 题解搬运+翻译
ABC399 G - Colorful Spanning Tree 题解搬运+翻译
G - 彩色生成树 题解
这个问题涉及拟阵交集。虽然解决一般的拟阵交集问题需要复杂的算法,但对于称为线性拟阵交集的特殊情况,有一个简单的随机化算法,无需复杂的实现。
拟阵的定义
一个有限集合 \(E\) 和它的一个子集家族 \(I\) 被称为一个拟阵 \((E, I)\),当且仅当它们满足以下所有条件:
- (1): \(I\) 包含空集。
- (2): 如果 \(I\) 包含 \(X\),那么它也包含 \(X\) 的每个子集 \(Z\)。
- (3): 如果 \(X, Y \in I\) 且 \(|X| < |Y|\),那么存在某个 \(e \in Y \setminus X\),使得 \(X \cup \{e\} \in I\)。
此外,我们定义以下术语:
- 独立集:包含在 \(I\) 中的集合。
- 依赖集:不在 \(I\) 中的 \(E\) 的子集。
- 基:一个极大独立集。
- 对于 \(X \subseteq E\),基的定义:包含在 \(X\) 中的极大独立集。
拟阵定义中的第三个条件等价于以下条件(证明略):
- (3’): 对于所有 \(X \subseteq E\),所有基的大小相同。
特别地,考虑 \(X = E\) 的情况,我们看到所有拟阵的基的大小都是相同的。
拟阵的例子
让我们来看一些具体的拟阵例子。
均匀拟阵和划分拟阵
给定一个有限集合 \(E\) 和一个非负整数 \(r\),定义一个子集家族 \(I\) 如下:
那么 \((E, I)\) 形成一个称为均匀拟阵的拟阵。
此外,均匀拟阵的直接和也形成一个拟阵,称为划分拟阵。具体来说,给定 \(E\) 的一个划分,记为 \(\{ E_1, E_2, \dots, E_k \}\),以及非负整数 \(r_1, r_2, \dots, r_k\),定义 \(I\) 如下:
那么 \((E, I)\) 是一个拟阵。(所有条件(1)、(2)和(3)的证明都很简单。)
线性拟阵
考虑一个矩阵 \(A\),设 \(E\) 为 \(A\) 的列的集合。定义 \(I\) 如下:
那么 \((E, I)\) 形成一个称为线性拟阵的拟阵。(可以证明,因为(1)、(2)和(3’)都直接来自线性代数。)
循环拟阵(图形拟阵)
设 \(E\) 为图 \(G\) 的边的集合,\(V\) 为 \(G\) 的顶点集合。定义 \(I\) 如下:
那么 \((E, I)\) 形成一个称为循环拟阵(也称为图形拟阵)的拟阵。(证明很容易,因为条件(1)、(2)和(3’)自然成立。)
拟阵交集
在与拟阵相关的问题中,常见的主题是拟阵交集。
给定两个拟阵 \((E, I_1)\) 和 \((E, I_2)\),它们的交集 \(I_1 \cap I_2\) 定义如下:
寻找 \(X \in I_1 \cap I_2\) 使得 \(\vert X \vert\) 最大的问题称为拟阵交集问题。
一个著名的可以用拟阵交集描述的问题是二分图中的最大匹配。考虑一个二分图,具有部分集 \(U\) 和 \(V\) 以及边集 \(E\)。对 \(U\) 的匹配条件要求每个 \(u \in U\) 至多有一条相邻的边被选择,这对应于一个划分拟阵。类似地,对 \(V\) 的匹配条件也可以表示为一个划分拟阵。因此,二分图匹配可以看作是两个划分拟阵的交集。许多其他问题也可以表述为拟阵交集。
已知拟阵交集问题可以在多项式时间内解决(大约为 \(\mathrm{O}(|E|^2 r)\),其中 \(r\) 是解集的大小),但算法复杂,这里不再详细介绍。有关更多细节,请参考以下资源(日语):
线性拟阵交集
拟阵交集的一个特例是线性拟阵交集问题。
已知如果我们仅寻求解的大小,线性拟阵交集问题可以比一般的拟阵交集问题更简洁地解决。
我们首先对问题进行表述。设 \(A_1\) 和 \(A_2\) 为具有相同列数的矩阵,设 \(E\) 为列的集合。那么,我们可以定义与 \(A_1\) 和 \(A_2\) 相应的线性拟阵 \((E, I_1)\) 和 \((E, I_2)\)。交集 \(I_1 \cap I_2\) 被称为线性拟阵交集。
对于线性拟阵交集问题,以下命题成立:
使用变量 \(x_1, x_2, \dots, x_{\vert E \vert}\) 定义多项式矩阵 \(D\) 和 \(M\) 如下:
\(D = \mathrm{diag}(x_e)\)(一个 \(E \times E\) 的对角矩阵,主对角线上的元素为 \(x_e\)),
\(M = A_1 D A_2^{T}\)。
然后,线性拟阵交集问题的解的大小等于 \(\mathrm{rank}(M)\)。
有关证明,请参考 Oshiro Taihei 的材料。
根据上述命题,解决线性拟阵交集问题归结为计算多项式矩阵的秩。直接计算多项式矩阵的秩是困难的,但可以通过随机替换变量并计算结果矩阵的秩模 \(p\) 来高概率找到。(这一方法的有效性得到了Schwarz-Zippel 引理的保证。)因此,设 \(n\) 为 \(A_1\) 和 \(A_2\) 的较大行数,\(m\) 为较小的行数,我们可以在大约 \(\mathrm{O}(nm^2)\) 的时间内计算线性拟阵交集问题的解的大小。
线性拟阵交集的具体例子(Edmonds 矩阵)
作为线性拟阵交集的具体例子,我们考虑二分图中的最大匹配问题和 Edmonds 矩阵。
设分区集为 \(U\) 和 \(V\),边集为 \(E\)。二分图的 Edmonds 矩阵 \(N\) 定义如下:
在这种情况下,二分图中的最大匹配的大小等于 \(\mathrm{rank}(N)\)。这一事实可以在不使用线性拟阵交集的情况下证明,但这里我们将使用线性拟阵交集来证明。
如前所述,二分图中的最大匹配可以表示为两个划分拟阵的交集。通过进一步转换,我们可以将其简化为线性拟阵交集。设 \(\mathbf{e}_i\) 表示一个列向量,其中第 \(i\) 个分量为 1,其他分量为 0。我们定义矩阵 \(A_1\) 和 \(A_2\),使得 \(A_1\) 中与边 \(e=(u,v)\) 对应的列向量为 \(\mathbf{e}_u\),而 \(A_2\) 中的列向量为 \(\mathbf{e}_v\)。通过这种方式选择 \(A_1\) 和 \(A_2\),我们可以将二分图中的匹配表示为与 \(A_1\) 和 \(A_2\) 相应的线性拟阵 \(I_1\) 和 \(I_2\) 的交集。
现在,计算矩阵 \(M\),我们得到:
这里,\(\mathbf{e}_u \mathbf{e}_v^T\) 是一个只有 \(uv\) 元素为 1,其他元素为 0 的矩阵。因此,我们可以确认 \(M\) 与 Edmonds 矩阵 \(N\) 相匹配,由此我们可以得出二分图中最大匹配的大小等于 \(\mathrm{rank}(N)\)。
问题的解决方案
如标题所示,这个问题涉及彩色生成树。彩色生成树是指问题陈述中定义的生成树(尽管在学术上,它似乎指的是 \(A_i = 1\) 的情况)。寻找彩色生成树的问题是拟阵交集的一个著名例子。
首先考虑在没有对 \((L, R)\) 的约束的情况下确定是否存在彩色生成树的简单情况。设图为 \((V, E)\),并让 \(E_c\) 为颜色 \(c\) 的边的集合。如果我们定义
那么 \((E, I_1)\) 和 \((E, I_2)\) 分别是一个划分拟阵和一个循环拟阵。边集 \(X\) 形成彩色生成树的条件是 \(X \in I_1 \cap I_2\) 且 \(\vert X \vert = N-1\)。因此,结合 \(I_2\) 的基的大小为 \(N-1\) 的事实,我们可以得出确定是否存在彩色生成树的问题等同于确定交集 \(I_1 \cap I_2\) 中最大的集合的大小是否为 \(N-1\)。
因此,我们发现这个问题可以通过拟阵交集算法在多项式时间内解决。接下来,我们将进一步转换问题,将其简化为线性拟阵交集。换句话说,我们将把划分拟阵和循环拟阵都转化为与某个矩阵对应的线性拟阵。
设 \(A_1\) 和 \(A_2\) 为与 \(I_1\) 和 \(I_2\) 对应的模 \(p\) 整数矩阵(其中 \(p\) 是一个足够大的质数)。我们需要仔细设计 \(A_1\) 和 \(A_2\) 以建立适当的对应关系。
设计 \(A_2\) 相对简单:我们可以将行数设置为 \(N\),并将每条边 \((u, v)\) 对应的列向量设置为 \(u\) 的分量为 1,\(v\) 的分量为 -1。有效性可以通过最小依赖集的列向量形成循环的事实证明。
设计 \(A_1\) 则不那么明显;我们希望有一个结构,其中最多可以选择 \(A_c\) 个颜色为 \(c\) 的列向量。一个可能的设计如下:
- 设 \(\sum_{c=1}^C A_c = K\)。\(A_1\) 将是一个具有 \(K\) 行和 \(\vert E \vert\) 列的矩阵。
- 将前 \(A_1\) 行分配给颜色 1,接下来的 \(A_2\) 行分配给颜色 2,依此类推。
- 对于颜色 \(c\) 的边所对应的列向量定义如下:
- 假设当前向量是第 \(n\) 个这样的向量。那么,对于对应颜色 \(c\) 的行,第一行将包含 \(n^0\),第二行将包含 \(n^1\),依此类推,直到第 \(A_c\) 行将包含 \(n^{A_c-1}\)。其他所有行将填充为 0。
\(A_1\) 的有效性源于 Vandermonde 行列式 非零的事实。
现在,通过上述方法,我们已将拟阵交集简化为线性拟阵交集。因此,在没有对 \(L\) 和 \(R\) 的约束的情况下,可以通过应用线性拟阵交集的随机化算法来解决该问题。
现在,让我们考虑原始问题,即计算满足问题陈述中条件的有效对 \((L, R)\) 的数量。关注随机化算法中出现的矩阵 \(M = A_1 D A_2^T\),我们观察到颜色 \(c\) 的边仅影响与颜色 \(c\) 对应的行。设 \(S_c = \sum_{i=1}^{c-1} A_i\),我们发现对于 \((L, R)\) 满足问题陈述中的条件,等价于由 \(M\) 中从行 \(S_L+1\) 到 \(S_R\) 形成的子矩阵的秩为 \(N-1\)。因此,如果我们能够解决以下问题,我们就可以确定每个 \((L, R)\) 是否满足条件。
对于 \(c=1,2,\dots,C\),解决以下问题:
- 从行 \(S_c+1\) 开始向下进行。在哪一行是观察到的子矩阵的秩首次变为 \(N-1\)?
这个问题可以使用一个在添加行向量的同时保持基的算法为每个 \(c=1,2,\dots,C\) 解决,时间复杂度为 \(\mathrm{O}(N^2 C K)\)。此外,使用在 ABC223H 中介绍的技术,时间复杂度可以减少到 \(\mathrm{O}(N^2 K)\)。(详细解释略去。)
通过适当地实现这些观察,我们可以在 \(\mathrm{O}(N^2 K)\) 的时间内解决问题,其中 \(\sum_{c=1}^C A_c = K\),这是足够快的。由于约束相对宽松,只要常数因子合适,\(\mathrm{O}(N^2 C K)\) 的解决方案也将通过。
- 作为替代解决方案,让我们考虑使用一般的拟阵交集算法来解决这个问题。实际上,以下事实成立:
- 对于每种颜色 \(c\),如果我们取一个极大子森林并移除不属于它的边,问题的答案保持不变。
- 利用这一事实,我们可以在数量级上减少边集 \(E\) 的大小,然后使用滑动窗口技术的通用拟阵交集算法,算法将在 \(\mathrm{O}(N^3 C^2)\) 的时间内运行。这样可能会导致超时(TLE),但通过常数因子的加速和一些有效的剪枝,我们推测解决方案可能会通过。
额外
-
通过应用当前算法,我们可以在 \(\mathrm{O}(W n^4)\) 的时间内解决加权线性拟阵交集问题,即寻找 \(\sum_{e \in X} w_e\) 的最大值的问题,其中 \(X \in I_1 \cap I_2\)。让我们考虑这一点。
-
这个问题(剧透警告) 实际上受到拟阵交集问题的启发,答案可以表示为某个矩阵的行列式。让我们尝试使用拟阵交集来解释这个问题。

浙公网安备 33010602011771号