一、
1、
匹配:~
匹配点、未匹配点(未盖点):~
最大匹配:边数最多
完全匹配:无未盖点
最佳匹配:权和最大
完备匹配:|M|=|X|<|Y|
完美匹配:|M|=|X|=|Y|
2、
增广路(增广轨):…..交替出现….,称P为相对M的一条增广路。
结论:
(1)、长度必为奇数。
(2)、若两未盖点间仅含一条边,该边为增广路
(3)、取反后可得到更大的匹配
(4)、当且仅当不存在相对M的增光路时,M为最大匹配
3、
二分图:……两部分……无向图
二、最大匹配问题
1、匈牙利算法
int ma[needp][needp],link[needp],visit[needp];
int n,m,t;//n为x集合中点数
#define p ma[x][i]
bool find(int x)
{
for(int i=1;i<=ma[x][0];i++)
{
if(visit[p]==t) continue;
visit[p]=t;
if(link[p]==0||find(link[p]))
{
link[p]=x;
return true;
}
}
return false;
}
int main()
{
int cnt=0;
for(t=1;t<=n;t++) if(find(t)) cnt++;
}
2、二分图的最大匹配:可看做由x指向y的单向边,且x、y可独立编号
三、最小点覆盖问题(二分图)
1、 Konig定理:一个二分图的最小点覆盖数等于最大匹配数
2、结论:最小点覆盖中一个点必在一个最大匹配的某一边上
3、找出最小覆盖点:从上半部每个未盖点出发,按“交替出现”规则,将走过的点标记。上部未标记加下部标记即为所求。
四、最大独立集问题
1、无向图的独立集:互不关联的点集
2、
二分图最大独立集数=顶点总数-最大匹配数
二分图最大独立集=除最小覆盖外的点
五、最小边覆盖
边数=点数-最大匹配
六、最小路径覆盖问题
1、
路径覆盖:覆盖所有顶点、无公共点的路径们
最小路径覆盖:~
2、 DAG的最小路径覆盖数=原图顶点数-拆点后,x->y变为x->y’ 的二分图的最大匹配。
3、二分图的最小路径覆盖数=点数-最小覆盖。