图的匹配—二分图

这是第一部分:二分图

第二部分:图的匹配—网络流

xht37 二分图与网络流 学习笔记

ix35 的 NOI 一轮复习 I:二分图网络流

Froggy 的 二分图 & 网络流 杂谈

\(\uparrow\) 学习资料)

定义与判定

如果一张无向图可以被划分为左部点和右部点,那么这是一张二分图

定理:如果一张无向图不存在奇环,那么这是一张二分图。

那么可以直接 \(O(n)\) 染色检验或其他方法等(如特殊情况下用扩展域并查集)。

二分图最大匹配

增广路的性质

  • 长度为奇数。

  • 奇数边是非匹配边,偶数边是匹配边。

  • 如果把路径上所有边的状态(是否为匹配边)取反,那么得到的新的边集 \(s\) 仍然是一组匹配,并且匹配的边数增加了 \(1\)

结论

二分图的一组匹配 \(S\) 是最大匹配,当且仅当图中不存在 \(S\) 的增广路。

匈牙利算法

即不断寻找增广路,遍历二分图,复杂度 \(O(nm)\)

P3386 【模板】二分图最大匹配

$\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

咕咕咕

posted @ 2021-09-20 14:08  EricQian06  阅读(81)  评论(0编辑  收藏  举报