一.最小路径覆盖
有向无环图的最小路径覆盖问题包括两种
(设G是一个有向无环图,S是G的一个路径集合):
(1)最小点路径覆盖:满足对于G中所有的点i,i且只在S中的一条路径中出现,求S的最小容量;
( 简而言之:最少有几条路径,把所有点覆盖,并且所有点只被覆盖一次)
处理方式:
建立一个新图,将G中的每个点i在新图中拆成两个点i’、i’’。
若G中存在边<i, j>则在新图中连边<i’, j’’>,显然新图是一个二分图
建立一个超级源点sp,超级汇点tp。
连接所有点<sp,i’,1>,<i’,sp,0>,<i’’,tp,1> , <tp,i’’,0>。
构建成网络流模型,跑一遍最大流
则(N-新网络流图的最大流)就是最小点路径覆盖值。(N为点的个数)
(2)最小边路径覆盖:满足对于G中所有的边E,E且只在S中的一条路径中出现,求S的最小容量;
(简而言之:最少有几条路径,把所有边覆盖,并且所有边只被覆盖一次)
处理方式:
对于图中的每个点i,设D[i]为(i的入度-i的出度)的值,按照D[i]将图中的点分类:
D[i]<0的称为“入少出多”的点,D[i]>0的称为“出少入多”的点,D[i]=0的称为“入出相等”的点。
则有:
定理 有向无环图中最小边路径覆盖的值等于图中所有“入少出多”的点的D值之和。
二.最大流最小割定理
割:把一个图的所有顶点分为2个集合,保证起点和终点在不同的集合中
(如果把割的所有边中 从起点集合到终点集合的所有边 去掉就不可能从起点到终点)
割的容量就等于:割的 所有边 中 从起点集合流向终点集合 的所有边 的 容量 和
对于任意一个割,割的容量大于等于这个图的最大流,
这个图的最小割就等于最大流
三.最小点覆盖
二分图中,选取最少的点数,使这些点和所有的边都有关联(把所有的边的覆盖),叫做最小点覆盖。
(简而言之:最少有多少个点,把图的所有边覆盖)
最小点覆盖数 = 最大匹配数