(二分图)最大匹配=x
匈牙利或dinic
\[ S\to l: 1\\ l\to r: inf\\ r\to T: 1 \]
\(l\)与\(r\)匹配 <==> 残余网络上 \(l\to r = inf-1\)
(网络图)最小割=最大流
从\(S\)开始在残余网络上dfs,标记访问到的点
\((u,v)\)在最小割中 <==> \(u\)被标记,\(v\)没有被标记
(二分图)最大(权)独立点集=L+R-x
\[ S\to l: val[l]\\ l\to r: inf\\ r\to T: val[r] \]
原因:割掉的边一定是\(S\to l\)或\(r\to T\), 割掉这条边代表这个点不选,所以总点权-最小割即为答案
(二分图)最小点覆盖=x
最大独立点集的补集
(DAG)最小链划分
对于每个点\(i\)拆成\(l_i,r_i\)两个点分别表示出,入
对于原图的边\((u,v)\)建立\((l_u,r_v)\)
答案即原图点数n-最大匹配
原因:一开始每个点都是一条链,\(l_u\to r_v\)匹配表示将\(u\)结尾的链和\(v\)开头的链合并
方案:\(l_u\to r_v\)匹配,表示\(u->v\)在其中一条链上。拓扑排序后dfs即可
(DAG)最小链覆盖=最大反链
即\(引理Dilworth引理\)
\(可达u可达v\) 为偏序关系
链:两两之间可比的点集
反链:亮亮之间不可比的点集
最小链覆盖:求最少的链使得链的并为原图(与划分不同的是链之间可以有交集)
求法:用floyd求传递闭包后,再求最小链分割即可
最大反链:点数最大的反链
同求最小链覆盖,建出二分图
点\(u\)在最大反链中 <==> \(l_u,r_u\)同时在最大独立集中
原因:
- 这些点一定构成反链。从其中取出任意两点,拆成的四个点都在最大独立集中,所以不存在连边。
- 这些点构成的反链一定最大。
- 设该二分图最大匹配为\(x\),则 \(最小链覆盖最大反链最小链覆盖=最大反链=n-x\)
- \(最大独立集最大独立集=2n-x\),所以必然存在至少\(n-x\)个点左右同时在最大独立集中
(DAG)最小反链覆盖=最长链
最小反链覆盖:拓扑排序后每一层极为一个反链
最长链:入门dp
二者相等显然