なんでバカのブログを読みたいの!为什么要看菜鸟的博客!|

园龄:粉丝:关注:

二分图 笔记

本文原在 2024-07-15 16:21 发布于本人洛谷博客。

一、定义

一个图能分成两部分,每一部分的点之间不存在边直接相连。

二、基本性质

没有奇长度的环。

三、

1. 判断二分图

黑白染色,走一步换一种颜色,如果有个点有两种颜色,那就不是二分图。

2. 最大匹配

将二分图左右一一匹配的最大对数。

简单好记方法:

  • 如果 B0 喜欢的女生 G0 还没有男朋友,就直接组 cp。

  • 如果 G0 有男朋友 B1 了,B1 再找一个没有男朋友的 G1,把 B0 和 G0 组 cp。

  • 如果 B1 找不到没有男朋友的女生了,那就不把 G0 让给 B0,B0 单身。

#include <bits/stdc++.h>
#define int long long
#define IOS ios::sync_with_stdio(0), cin.tie(0), cout.tie(0)
using namespace std;
const int N = 1e3 + 10;
int n, m, e, ans, vis[N], mat[N];
vector<int> g[N];
bool dfs(int u, int tag) {
if (vis[u] == tag)
return false;
vis[u] = tag;
for (int v : g[u])
if (!mat[v] or dfs(mat[v], tag)) {
mat[v] = u;
return true;
}
return false;
}
signed main() {
IOS;
cin >> n >> m >> e;
for (int i = 1, u, v; i <= e; i++) {
cin >> u >> v;
g[u].push_back(v);
}
for (int i = 1; i <= n; i++)
if (dfs(i, i))
ans++;
cout << ans;
return 0;
}

3. 最小覆盖集

选最少的点,使二分图中每一条边都至少有一个端点被选择。

根据 König 定理,二分图的最小覆盖集等于最大匹配。

4. 最大独立集

选最多的点,使选中的点间没有边直接相连。

二分图的最大独立集等于总点数减去最小覆盖集。

本文作者:Garbage fish's Blog

本文链接:https://www.cnblogs.com/Garbage-fish/p/18709924

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   Garbage_fish  阅读(3)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
收起