二分图笔记

一些定理

一、最小点覆盖=最大匹配

即,选一些点染色,要求图中所有边至少有一端被染色。


证明:

涂色方案:设匹配点为红点,未匹配点为蓝点。易知,一对匹配的红点,最多只有一个点会连接蓝点。将这个连接了蓝点的点染色。

合法性:所有匹配边显然已经合法了,考虑非匹配边。非匹配边有一个性质:它至少与一条匹配边有公共端点。所以那条与它有公共端点的边被合法化时,这条非匹配边也会合法。

最优性?

二、最小边覆盖=总点数-最大匹配

即,选一些边染色,要求对于图中任意点 \(u\),至少有一条与 \(u\) 相连的边被染色。


证明:

考虑每个点怎么被染色。最暴力的就是随便找一条与它相连的边染色。考虑优化,一条匹配边可以使两个点合法,所以我们尽量选匹配边,最终答案就会减少匹配边的数量,最大化匹配边数量,最终答案就会减少最大匹配数

三、最大独立集=总点数-最大匹配数

图的最大独立集是一个最大的点集,要求任意两点之间没有边相连。


证明:

问题等价于:去掉最少的点,同时删除与其相连的边,使得剩下点之间没有边。删除的那些点就是最小点覆盖问题,所以删除的最小的点的数量就是最大匹配数

四、最小路径覆盖

这个问题是针对DAG的。给出一个有向图,请用最少的有向路径,覆盖所有的顶点。同一个顶点只能被一条路径覆盖。

根据DAG建出一个二分图 \(G\):把每个点拆成两个点。分别表示这个点的入度和出度。再把DAG上的边连到 \(G\)

结论:最小路径覆盖= DAG点数 - \(G\) 的最大匹配

证明:

因为是求一条链,链上的点,除了起点和终点,其他点的出度入度都为 \(1\)。所以对应着二分图上一个点最多只有一个匹配。每一条链都可以在二分图上表示出来。让链的数量最少,等价于让入度为 \(0\) 的点变少,等价于让二分图第一部的非匹配点最少。也就是要找到最大匹配。

模型及例题

  1. 超级英雄:板题。从一个点出发找不到增广路,它就一定不在最大匹配中
  2. P4304 [TJOI2013] 攻击装置:把图划分为两个部分。要求只能从一个走到另一个。将问题转化为最大独立集问题。染色(划分)技巧:观察一个点能走到的点与它的不同
  3. P5030 长脖子鹿放置:同2。都是最大独立集问题
  4. P2172 [国家集训队] 部落战争:DAG的最小路径覆盖
  5. P2825 [HEOI2016/TJOI2016] 游戏:考虑没有硬石头,每一行,每一列就只有一个炸弹把矩阵中的一个点 \((x,y)\) 抽象为一条边,把每一行和每一列抽象为点,若在 \((x,y)\) 放炸弹就代表 \(x\) 行和 \(y\) 列匹配,寻找最大匹配数。考虑本题,一行被隔开成了很多段,这些段互不影响,列也一样。所以把每一横段和每一竖段抽象为一个点,再寻找最大匹配数。
  6. P3231 [HNOI2013] 消毒:考虑二维,不难发现,每次要么涂满某一整行,要么涂满某一整列,这样每一次代价都为 \(1\)。所以再次将一个点 \((x,y)\) 抽象为一条边,行和列抽象为点。我们想用最小的染点的次数使所有边合法,所以就是找最小点覆盖=最大匹配。考虑原问题,对于每一层,要么直接用 \(1\) 的代价染完这一层,要么和其他层一起考虑,用一些“行和列染完”。注意到必定有一维 \(\leq 17\)。不妨暴力枚举每一层的情况。
  7. P1963 [NOI2009] 变换序列字典序最小的最大匹配方案。先随便找到一个最大匹配方案。从小到大枚举 \(i\),从小到大遍历 \(i\) 能匹配的点 \(j\)。断掉 \((i,match_i),(j,match_j)\)。如果从 \(match_i\) 出发,能找到一条增广路,说明 \(i\) 不是 \(match_i\) 必须连接的边,\(j\) 也不是 \(match_j\) 必须连接的边。这时就可以匹配 \((i,j)\)。注意这里有一个操作:锁定 \((i,j)\)。在以后的检测(找增广路)时,不能经过锁定的匹配。这保证了最小字典序。
  8. P4055 [JSOI2009] 游戏:重点其实在博弈论的分析,这里不再赘述,题解很清楚。用到了一个性质,非匹配点连接的点都是匹配点。还有就是找所有可能的非匹配点的方法:先随便跑出一个最大匹配方案。从每一个当前的非匹配点 \(x\) 开始(注意第一部和第二部的非匹配点都要找到),遍历它连接的每一个匹配点 \(y\),可以把 \((match_y,y)\) 替换为 \((x,y)\) 那么 \(match_y\) 也能变成非匹配点,又继续从 \(match_y\) 点开始找非匹配点,一直递归下去直到某一个非匹配点能替换的点都被其他点替换过了
posted @   bwartist  阅读(29)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 使用C#创建一个MCP客户端
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示