二分图的最大匹配,最小点覆盖,最小边覆盖,最大独立集

DAG的最小路径覆盖,最小链覆盖(可相交路径覆盖),最大独立集,最长反链

二分图

注:此部分中nn表示图中总点数(两部分点数的总和),PP表示最大匹配数

最大匹配

选出尽量多的边,使得每个点至多是其中一条边的端点

建源点汇点,从SS向左边每个点连流量为11的边,右边每个点向TT连流量为11的边,原图中的边流量为11,跑最大流

显然中间部分每条边最多流量为11,每个点最多被一条边包含,且选出来的边最多

最小点覆盖

选出尽量少的点,使得每条边至少有一个端点被选出

最小点覆盖 ,就是最大流


不难发现上面建图的最小割就是最小点覆盖

显然割掉中间的边不会比割两侧的边优,割两侧的边就代表选择相应的点

同一张网络流的图中,最大匹配是利用了中间流的情况,最小点覆盖是利用了两侧割的情况,但是本质是一样的

最小边覆盖

选出尽量少的边,使得每个点至少是一条选出的边的端点

最小边覆盖=nP= n-P,就是最小割


要尽量使得选出的边贡献最大,也就是先做最大匹配

匹配边每条边都会产生22的贡献(连接的两个点都不重复),那么这里就已经选出PP条边, 个点了

还剩下n2Pn-2P个点不能和其他点匹配,那么会有 条边

总边数为P+(n2P)=nPP + (n-2P) = n - P

最大独立集

选出尽量多的点,使得点两两之间没有边连接

最大独立集=nP=n-P

推论:最大点权独立集 == 总权值 - 最小点权覆盖集(NOIp2018 保卫王国


最大匹配没有选出来的所有点,它们两两之间没有连边,这里有n2Pn-2P个点

显然,最大匹配的两个点不可能同时还向另外一侧有连边(否则最大匹配数能+1),因此最大匹配的两个点能任意再选一个,这里有 个点

总点数为(n2P)+P=nP(n-2P) + P = n-P


UPD另外一种理解方法

最大独立集 + 最小点覆盖 = 所有点

这是因为最小点覆盖把所有边都包含了,所以对于每个在最大独立集中的点,它连向的点都在最小点覆盖中

这样理解的话便于输出方案,只要用最小点覆盖的做法,跑网络流的时候把两侧没有被割的点输出即可

有向无环图(DAG)

最小路径覆盖

用最少的不相交路径,覆盖所有点恰好一次

  • 把每个点xx拆成x1,x2x_1, x_2,对于原图边(x,y)(x, y),连边(x1,y2)(x_1, y_2)
  • 求最大匹配PP,最小路径覆盖就是nPn-P

一开始每个点都独立为一条路径,在二分图中匹配就是将路径合并(即匹配的这两个点在同一条路径上)

因为二分图的匹配中不能有公共点,显然这样做出来路径没有交

最小链覆盖(可相交路径覆盖)

用最少的可以相交的路径,覆盖所有点至少一次

先跑一遍传递闭包,然后就转化成了最小路径覆盖


这个很显然,因为在原图中两条相交的路径都能在新图中转化成不相交的

Dilworth定理

反链:DAG中的一个点集,链上任意两个点xx, yy,满足 xx 不能到达 yy,且 yy 也不能到达 xx

最长反链长度==最小链覆盖

最长链长度==最小反链覆盖


证明真心没看懂