网络流模型 · 最小路径覆盖 & 拓展

· · 个人记录

定义

在一个 DAG(有向无环图中),选择其中的一些简单路径,若图中每个点都恰好在其中一条路径上,则称这些路径是一个路径覆盖

所有路径覆盖中,路径条数最小的路径覆盖叫做最小路径覆盖

例如在上图中,\{\{1\},\{2,3\},\{4,5\}\} 是一个路径覆盖,\{\{1,2,3,4,5\}\} 是一个最小路径覆盖,只用了一条路径。

任务是找出 DAG 上的最小路径覆盖,且输出方案。

建模

考虑二分图最大匹配。

我们对原图中每个点 u 拆成两个点,记为左部点 L(u) 和右部点 R(u)

对于原图中每条边 (u,v),连接 L(u)R(v)

则答案为原图中点数减去最大匹配数。

正确性

假设开始时图上的每个点都自成一条路径,我们要做的是尽可能多地把路径合并。

考虑一下路径合并的隐藏条件:

首先,路径合并是可以传递的,简单来说,如果 x 能跟 y 合并,y 能跟 z 合并,那么 \{x,y,z\} 可以合并成一条路径。所以我们可以只考虑点与点之间的合并关系,再利用传递性求方案。

其次,每条路径只能向一个路径合并,也只能被一条路径合并。

这下就好办了。在我们构造的二分图中,如果一条边 (L(u),R(v)) 被选中了,那么说明在原图中点 u 要向点 v 合并,同时其它在二分图中与其它 L(u) 相连的边都不能被选中,对应着在原图中一个点仅能选择另外一个点进行合并。

此时的最大匹配就是可以合并的数量,用总的点数减去它就是答案。

至于方案数,可以根据上面所说的,用并查集简单维护即可。

二分图的最大匹配我们可以选择用最大流来求。跑完最大流后,如果一条连接 L(u)R(v) 的边容量为 0,则说明这条边在二分图中被选中了。

拓展 1 · 最小链覆盖

所谓最小链覆盖,无非是把路径改为了链。对应的,DAG 上的每一个点可以被重复覆盖多次。

此时我们对 DAG 用 Floyd 进行传递闭包,得出每个点相互可不可达,再根据这个跑最小路径覆盖即可。

拓展 2 · DAG 最大独立集

顾名思义,我们要在 DAG 中选取一些点,使得任意两个点都不能从其中一个点到另外一个。

此时我们引入偏序集。

偏序集

偏序集和偏序关系

我当然不会上来就放形式化的东西,否则你们还有什么来看的必要呢?

所谓偏序集,指的是一个集合和一个关系的共同体。

那么何为关系?举个最简单的例子,“\leq”(小于等于号)是一个关系。

现在我们给偏序集做一个定义,百度说:

若在集合 A 上给定一个偏序关系 \leq ,则称集合 A 按偏序关系 \leq 构成一个偏序集合,集合 A 和偏序 \leq 一起称为偏序集,记作 (A,\leq)

不懂。什么是偏序关系?

R 是集合 A 上的一个关系,如果 R自反的反对称的和可传递的,则称 R 是集合 A 的偏序关系,简称偏序,记作“\leq”。

现在对偏序关系中的一些名词做一些解释:

自反:\forall a\in A,a\leq a

反对称:\forall a,b\in A, a\leq b b\leq a,a=b

传递性:\forall a,b,c\in A, a\leq b b\leq c, a\leq c

不妨把这个小于等于号真的当做一个小于等于号来看待,则 \leq\mathbb{R} 的偏序关系。

所以我们可以说 (\mathbb{R},\leq) 是一个偏序集。

元素之间的可比关系

(P,\leq) 是一个偏序集。

否则我们说 $a$ 与 $b$ 不可比,记作 $a\mid\mid b$。 ### 延伸 设 $(P,\leq)$ 是一个偏序集,$\geq$ 是一个关系。 若对于 $\forall x,y\in P$,有 $x\leq y \Leftrightarrow y\geq x$,则我们称 $\geq$ 是 $\leq$ 的逆关系,记作 $\leq^{-1}$。$\leq^{-1}$ 是 $\leq$ 的逆。无需解释,符号已经说的很明白了。 那么,若 $(A,\leq)$ 是一个偏序集,$(A,\leq^{-1})$ 也是一个偏序集。这是显然的。$(A,\leq^{-1})$ 称作 $(A,\leq)$ 的对偶,简记作 $A^{-1}$。 ### 偏序集的哈塞图 所谓哈塞图,不如将其理解为一个 DAG。 设 $(P,\leq)$ 是一个偏序集,我们对于 $\forall a,b(a\neq b)\in P,$ 若 $a\leq b$ 则从 $b$ 到 $a$ 连一条边,最后显然会形成一个 DAG。(根据传递性可得到图中没有环) ### 链、反链、Dilworth 定理 偏序集 $(P,\leq)$ 上的一个链是一个元素集合 $S \subset P$,其中 $\forall a,b\in S,a$ 与 $b$ 可比。 反链就是反着来,也是一个元素集合 $S\subset P$ 其中 $\forall a,b\in S,a\mid\mid b$。 需要注意的是,链在 DAG 中并不是一条路径,而是一条路径上可以不连续的几个点,但是在后续我们为了方便,把链看成 DAG 上的一条路径,反链就是一些 DAG 上互相不可达的点。 接下来我们引入偏序集的链划分。 所谓链划分,就是一些链的集合,使得偏序集的每一个元素都在其中至少一条链上。 最小链划分就是用最少的链来把整个偏序集覆盖,对应到 DAG 上就是最小链覆盖。 Dilworth 定理指出,**偏序集中的最长反链长度等于最小链划分个数**。 证明略,感兴趣的可以尝试对偏序集的大小进行归纳证明。 ## 模型 看到这里是不是恍然大悟了,我们在原 DAG 上求最小链覆盖,得到的答案就是最大独立集大小。