网络流模型 · 最小路径覆盖 & 拓展
定义
在一个 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\in P$,若 $a\leq b$ 或 $b\leq a$,则我们称 $a$ 与 $b$ 是可比的。无需解释。
否则我们说 $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 上求最小链覆盖,得到的答案就是最大独立集大小。