定义见:OI-Wiki 图的匹配 。
二分图
解法 \(1\) :网络流(通用)
二分图最大匹配可以转换成最大流(费用流)模型 。
如果使用 \(\operatorname{Dinic}\) 算法求该网络的最大流,复杂度\(O(\sqrt{n}m)\) 。
具体代码见博客文章网络流 。
解法 \(2\) :匈牙利算法(一般只适合求二分图最大匹配)
即不断寻找增广路,遍历二分图,最坏复杂度为 \(O(nm)\) 。
P3386 【模板】二分图最大匹配 :
核心代码:
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++;
}
CF1139E Maximize Mex
参考
性质:
二分图最大独立集
选最多的点,满足两两之间没有边相连。
二分图中,\(\text{最大独立集} = n - \text{最大匹配}\) 。
二分图最小点覆盖
选最少的点,满足每条边至少有一个端点被选,不难发现补集是独立集。
二分图中,\(\text{最小点覆盖} = n - \text{最大独立集}\) 。
一般图
咕咕咕~