ABC399 G - Colorful Spanning Tree 题解搬运+翻译
G - 彩色生成树 题解 by en_translator
这道题涉及矩阵交集。
虽然一般情况下解决矩阵交集问题需要复杂的算法,但对于称为线性矩阵交集的特殊情况,有一种简单的随机化算法,不需要复杂的实现。
矩阵的定义
一个有限集合 \(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\) 的基: 包含在 \(X\) 中的最大独立集。
矩阵的第三个条件等价于以下条件(证明省略):
- (3’): 对于所有 \(X \subseteq E\),\(X\) 的所有基具有相同的大小。
特别地,考虑 \(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\) 是解集的大小),但算法复杂,这里省略。有关更多详细信息,请参考以下资源(以日文):
- 冈本义夫的讲义,hitonanode 的实现示例
线性矩阵交集
矩阵交集的一个特殊情况是 线性矩阵交集 问题。
已知如果我们只寻求解的大小,线性矩阵交集问题可以比一般的矩阵交集问题更简洁地解决。
我们首先对问题进行表述。令 \(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\)-th 分量为 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\) 列向量。一个可能的设计如下:
- 设 \(\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\)。让我们思考一下。
-
这个问题(剧透警告) 实际上是受到矩阵交集问题的启发,答案可以表示为某个矩阵的行列式。让我们尝试用矩阵交集来解释这个问题。