当前位置: 首页 > news >正文

图的匹配

增广路

定义

  • 交错路始于非匹配点且由匹配边与非匹配边交错而成。

  • 增广路是始于非匹配点且终于非匹配点(除了起始的点)的交错路。增广路中边的数量是奇数。

增广路上非匹配边比匹配边数量多 \(1\),如果将增广路上的匹配边和未匹配边反转,则匹配数量会增加 \(1\) 且依然是交错路。

二分图匹配

定义:一张二分图上的匹配称作二分匹配。

\(G\) 为二分图,若在 \(G\) 的子图 \(M\) 中,任意两条边都没有公共节点,那么称 \(M\) 为二分图 \(G\) 的一个匹配,且 \(M\) 的边数为匹配数。

二分图最大匹配

增广路算法

因为增广路长度为奇数,路径起始点非左即右,所以我们先考虑从左边的未匹配点找增广路。

因为交错路的关系,增广路上的第奇数条边都是非匹配边,第偶数条边都是匹配边,于是左到右都是非匹配边,右到左都是匹配边。 于是我们给二分图 定向,问题转换成:有向图中从给定起点找一条简单路径走到某个未匹配点,这个问题就等价于从点 \(x\) 能否走到终点 \(y\)

那么只要从起始点开始 DFS 遍历直到找到某个未匹配点,\(O(m)\)。未找到增广路时,拓展的路也称为 交错树

性质:因为要枚举 \(n\) 个点,总复杂度为 \(O(nm)\)

代码实现:

#include<bits/stdc++.h>
using namespace std;
const int N=510;
int match[N],vis[N],ans;
vector<int> q[N];
int dfs(int x){if(vis[x]) return 0;vis[x]=1;for(int i=0;i<q[x].size();i++){int y=q[x][i];if(!match[y]||dfs(match[y])){match[y]=x;return 1;}}return 0;
}
int main(){int n,m,t,u,v;cin>>n>>m>>t;while(t--){cin>>u>>v;q[u].push_back(v);}for(int i=1;i<=n;i++){memset(vis,0,sizeof vis);ans+=dfs(i);}cout<<ans;return 0;
}

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

二分图的判定

定义:不存在奇环的图是二分图。

判定方法:对图上遍历顺序相邻的两点着上相间的颜色,如果最后发现点的颜色关系不矛盾,则此图存在奇环,否则此图为二分图。

例题:T335415 0x68-二分图的判定-关押罪犯,T390010 0x68-二分图匹配-棋盘覆盖,T390013 0x68-二分图匹配-车的放置,T390014 0x68-二分图匹配-导弹防御塔,T390017 0x68-二分图匹配-蚂蚁

http://www.hskmm.com/?act=detail&tid=23162

相关文章:

  • Tarjan 算法
  • Mondriaans Dream题解
  • 网络流 最大流 Dinic 算法
  • 2025.10.2 测试
  • 数学章节总结
  • 软件工程_作业一
  • CF VP 记录
  • LabVIEW与PLC 汽车驻车制动自动调整 - 实践
  • 04. 布局管理
  • 关于安装博客园皮肤中有关于配置音乐播放器的补充(awescnb)
  • AGC VP 记录 2
  • 2025 --【J+S 二十连测】-- 第四套 总结
  • Websocket+cpolar:如何轻松实现服务远程访问? - 教程
  • 如何用C语言实现5种基本的排序算法
  • 函数-装饰器基础知识+推导式
  • VUE - 实战 2
  • QBXT2025S刷题 Day1
  • 2025多校冲刺CSP模拟赛1(螳臂复活祭)
  • mobvista三月之旅(In Peking)
  • 大学生HTML期末大作业——HTML+CSS+JavaScript购物商城(草莓) - 指南
  • P6782 [Ynoi2008] rplexq
  • AT_agc040_b [AGC040B] Two Contests
  • AT_arc084_b [ABC077D] Small Multiple 题目分析
  • 287. 寻找重复数
  • 福州市 2025 国庆集训 Day2 前三题题解
  • 2025 年马赛克厂家 TOP 企业品牌推荐排行榜,陶瓷,游泳池,喷墨,冰裂,拼花,防滑,复古,家装马赛克推荐这十家公司!
  • oppoR9m刷Linux系统: 手动备份系统与基带IMEI/NVRAM/QCN
  • 原来你是这样的claude code aciton:没想象中好
  • 实用指南:【Python】正则表达式
  • FlareOn1 -- 5get_it