图的匹配—二分图
这是第一部分:二分图
第二部分:图的匹配—网络流
(\(\uparrow\) 学习资料)
定义与判定
如果一张无向图可以被划分为左部点和右部点,那么这是一张二分图
定理:如果一张无向图不存在奇环,那么这是一张二分图。
那么可以直接 \(O(n)\) 染色检验或其他方法等(如特殊情况下用扩展域并查集)。
二分图最大匹配
增广路的性质
-
长度为奇数。
-
奇数边是非匹配边,偶数边是匹配边。
-
如果把路径上所有边的状态(是否为匹配边)取反,那么得到的新的边集 \(s\) 仍然是一组匹配,并且匹配的边数增加了 \(1\)。
结论
二分图的一组匹配 \(S\) 是最大匹配,当且仅当图中不存在 \(S\) 的增广路。
匈牙利算法
即不断寻找增广路,遍历二分图,复杂度 \(O(nm)\) 。
$\texttt{code}$
bool dfs(int x)
{
for(int i=hea[x];i;i=nex[i]) if(!vis[ver[i]])
{
vis[ver[i]]=true;
if(!match[ver[i]] || dfs(match[ver[i]]))
{
match[ver[i]]=x; return true;
}
}
return false;
}
for(int i=1;i<=n;i++)
{
memset(vis,false,sizeof(vis));
if(dfs(i)) ans++;
}
km 算法
咕咕咕
最大团
最大团是指图 \((S,V)\) 中包含的最大子 \(K\) 图(最大的完全图)
咕咕咕
性质与应用
最大独立集
选最多的点,满足两两之间没有边相连。
二分图最大独立集 = 总点数 - 最大匹配
一般图最大独立集 = 补图的最大团
关于输出方案:
残量网络上与 \(S\) 连通的左部的点以及与 \(S\) 不连通的右部的点。
最小点覆盖
选最少的点,满足每条边至少有一个端点被选,不难发现补集是独立集。
最小点覆盖 = 总点数 - 最大独立集 = 最大匹配
如 ABC274G
有向无环图的最小路径点覆盖
即用尽量少的不想交的简单路径覆盖所有点(每个点恰好被覆盖一次)。
可以将每个点拆为两个点 \(i,i+n\),每一条有向边 \((x,y)\) 在现在的二分图中 \(x\) 与 \(y+n\) 连边。
最小路径条数 = 总点数 - 最大匹配
例题
CF1139E Maximize Mex
咕咕咕