洛谷 P3386:【模板】二分图最大匹配 ← 匈牙利算法

news/2025/11/27 17:55:04/文章来源:https://www.cnblogs.com/triwa/p/19278954

【题目来源】
https://www.luogu.com.cn/problem/P3386

【题目描述】
给定一个二分图,其左部点的个数为 n,右部点的个数为 m,边数为 e,求其最大匹配的边数。
左部点从 1 至 n 编号,右部点从 1 至 m 编号。

【输入格式】
输入的第一行是三个整数,分别代表 n,m 和 e。
接下来 e 行,每行两个整数 u,v,表示存在一条连接左部点 u 和右部点 v 的边。

【输出格式】
输出一行一个整数,代表二分图最大匹配的边数。

【输入样例一】
1 1 1
1 1

【输出样例二】
1

【输入样例二】
4 2 7
3 1
1 2
3 2
1 1
4 2
4 1
1 1

【输出样例二】
2

【数据规模与约定】
对于全部的测试点,保证:
1≤n,m≤500,1≤e≤5×10^4。
1≤u≤n,1≤v≤m。
不保证给出的图没有重边。

【算法分析】
● 二分图的概念:如果无向图 G=(V, E) 的所有点可以分为两个集合 V1,V2,所有边都在 V1 与 V2 之间,且 V1,V2 的内部都没有边,则称 G 是一个二分图。

● 一个图是否为二分图,一般用“染色法”进行判断。染色法的核心思想非常直观:尝试用两种颜色对图中的所有顶点进行着色,并确保‌任何一条边两端的顶点颜色都不相同‌。如果能成功完成着色,则该图是二分图;否则,不是。

● 染色法的算法流程通常基于 BFS 或 DFS 实现。
(1)选择一种颜色(如 0)作为起始颜色。
(2)从一个未访问的节点开始,将其染色,然后遍历其所有邻居。
(3)若邻居未染色,则将其染成与当前节点相反的颜色(如 1),并递归(DFS)或入队(BFS)处理。
(4)若邻居已染色,则检查其颜色是否与当前节点相反。若颜色相同,则说明存在奇环,该图不是二分图。

● 匈牙利算法是解决“二分图最大匹配”问题的专精算法,由匈牙利数学家 Edmonds 于 1965 年提出,其主要功能是「求二分图的最大匹配的数量」。

● 匈牙利算法的冲突处理逻辑
设集合 U 和 V 为二分图的两个顶点集,M 为当前匹配集合。当元素 x∈U 需要与元素 y∈V 匹配,但 y 已与元素 z∈U 匹配时,算法的冲突处理逻辑为:
(1)检查元素 z 能否与集合 V 中其他元素 c(c≠y)形成新的匹配。
(2)若存在这样的元素 c,则将匹配关系调整为 (z,c) 和 (x,y)。
(3)若不存在,则继续为 x 寻找 V 集合中的其他匹配候选。

冲突处理

显然,匈牙利算法冲突处理的逻辑是“后来者居上”、“腾位子

● 匈牙利算法的示例
俗话说,“男女搭配,干活不累”。已知二分图的一部分是“男生集合”,另一部分是“女生集合”。若把具有好感的男女生匹配为“干活搭子”,请问最多能匹配成多少对儿?这就是匈牙利算法要解决的问题。(备注:具有好感的男女生已用线在二分图中进行了连接)

男生女生01

(1)遍历到 1 号男生,发现他和 2 号女生具有好感。因此,将他俩连一条红线配成“干活搭子”。

男生女生02

(2)遍历到 2 号男生,发现他和 1 号女生具有好感,因此,将他俩连一条红线配成“干活搭子”。

男生女生03

(3)遍历到 3 号男生,发现他和 2 号女生具有好感,但是 2 号女生已经和 1 号男生配对了。
怎么办?观察易知,1 号男生还和 4 号女生具有好感。那么问题就简单了。解决方法是给 1 号男生和 2 号女生连一条绿线,标示他们分开。然后再把 1 号男生和 4 号女生连一条红线配成“干活搭子”,3 号男生和 2 号女生连一条红线配成“干活搭子”。此番操作,都有配对,皆大欢喜。

男生女生04

(4)遍历到 4 号男生,发现他和 3 号女生具有好感。因此,将他俩连一条红线配成“干活搭子”。最后,获得最大匹配数量为 4 对。

男生女生05


【算法代码】

#include <bits/stdc++.h>
using namespace std;const int N=5e2+5,M=5e4+5;
int e[M],ne[M],h[N],idx;
int mate[N],st[N];void add(int a,int b) {e[idx]=b,ne[idx]=h[a],h[a]=idx++;
}bool HA(int u) { //Hungarian Algorithmfor(int i=h[u]; i!=-1; i=ne[i]) {int j=e[i];if(!st[j]) {st[j]=true;if(!mate[j] || HA(mate[j])) {mate[j]=u;return true;}}}return false;
}int main() {memset(h,-1,sizeof h);int n,m,e;cin>>n>>m>>e;while(e--) {int u,v;cin>>u>>v;add(u,v);}int cnt=0;for(int i=1; i<=n; i++) {memset(st,false,sizeof st);if(HA(i)) cnt++;}cout<<cnt<<endl;return 0;
}/*
in:
4 2 7
3 1
1 2
3 2
1 1
4 2
4 1
1 1out:
2
*/



【参考文献】
https://blog.csdn.net/hnjzsyjyj/article/details/155283857
https://www.cnblogs.com/chenxiaoran666/p/Hungarian.html
https://www.cnblogs.com/lnchy/p/10139601.html
https://blog.csdn.net/wangqianqianya/article/details/81981933
https://blog.csdn.net/dark_scope/article/details/8880547
https://codeleading.com/article/15753372769/
https://www.luogu.com.cn/problem/P3386
https://ac.nowcoder.com/acm/contest/1083/D
http://poj.org/problem?id=1274
http://poj.org/problem?id=3692
https://www.acwing.com/problem/content/374/
http://acm.hdu.edu.cn/showproblem.php?pid=3605
https://mdnice.com/writing/34549e8c749b4683bf8765cbafb5bc36






 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/978786.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

minidot软件的安装

github地址:https://github.com/thackl/minidot 001、git clone https://github.com/thackl/minidot.git 002、cd minidot/bin/ ./minidot。

【Linux】编辑器vim的使用和理解gcc编译器 - 详解

【Linux】编辑器vim的使用和理解gcc编译器 - 详解2025-11-27 17:50 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; displa…

UWB汽车钥匙介绍

​ 汽车钥匙经历了机械钥匙、遥控钥匙、PEPS、数字钥匙四个阶段,而数字钥匙又分为BLE/NFC/UWB三种技术路线。 由于UWB安全性、定位精度、作用范围明显好于BLE和NFC,因此成为汽车数字钥匙的最优技术。PEPS是指无钥匙进…

php 8.2 配置安装php-zbarcode扩展

前言 https://www.cnblogs.com/niuben/p/19274540 由于这篇帖子的 php-zbarcode 扩展,不支持 php8 所以使用 https://github.com/micbox/php-zbarcode 来进行安装 下载代码 git clone https://github.com/micbox/php-…

庸者谋事,智者谋局

《孙子兵法》讲:“庸者谋事,智者谋局。” 庸者只会把目光定格在一件事上,在他们眼中世界是孤立的、片面的、静止的。 智者却能把单个的事件加上时间、空间的维度,全面系统地思考问题。 不谋一世者,不足谋一时;不…

热血体育竞技 赛场荣耀时刻

2025-11-27 17:53:28 热血体育竞技 赛场荣耀时刻|@YiNwUYu.cOm@||@XjZsGc.cN@||@CwAnBaN.cN@||@NbXwHl.cOm@||@MoMei88.cOm@||@DgNjLwL.cOm@||@SdPzHb.cOm@||@LeEdEnTeX.cOm@||@JiYeShIGaO.cOm.cN@||@KuIYiNlAi.cN@|

2025 年最新推荐液位计厂家排行榜:聚焦投入式 / 磁致伸缩 / 防爆 / 防水 / 浮球液位计优质企业

引言 在工业生产、水利工程、石油化工等关键领域,液位计的精准度与稳定性直接关系到生产安全、效率提升及资源优化。当前液位计市场品牌繁杂,既有技术滞后、精度不足的产品,也存在小品牌稳定性差、售后缺失的问题,…

奥运赛事激情对决 体育竞技热血启航

|@KePrInTiNg.cOm@||@JxRuNfEnGyy.cOm@||@ImEiLaObAn.cOm@||@HaOyAnWu.cOm@||@GaNsHiChUcHeNqi.cOm@||@QiQuWq.cOm@||@YaNhUiYuAn.cOm@||@CyJyJt.cN@||@DgHpSh.cOm@||@YiNwUYu.cOm@||@XjZsGc.cN@||@CwAnBaN.cN@||@NbXw…

2025 年传感器厂家最新推荐排行榜:磁致伸缩 / 防爆 / 液位等多类型产品权威测评与实力解析线性 / 矿用 / 直线 / 油缸位移传感器 / 液位传感器公司推荐

引言 当前传感器行业需求持续攀升,但品牌繁杂与标准缺失导致采购决策难度剧增。为此,结合国际传感技术协会(Sensors International)测评体系(Impact Factor 8.78,CiteScore 10.2)及产业联盟五维评分模型,开展权…

【相反数】暴力即可

暴力遍历+一点点剪枝,没什么好说的 #include<iostream> #include<vector> using namespace std;int N;int main(){cin >> N;vector<int> num;vector<bool> vis(N+3,false);for(int i =…

【JPCS出版 | 前五届均已见刊检索】第六届材料化学与复合材料国际学术会议(MCCM 2025)

第六届材料化学与复合材料国际学术会议(MCCM 2025)将于2025年12月12-14日在广州隆重召开。【支持线上参会,线上做口头报告,线上做海报展示】 【本届EI期刊合作,并延续JPCS同步收录,双出版,多种选择】 第六届材料…

synchronized(this) 用法详解

基本概念 synchronized(this) 是 Java 中的一种同步机制,通过对当前对象实例加锁来保证线程安全。当一个线程进入被 synchronized(this) 修饰的代码块时,会获取当前对象的锁,其他线程必须等待该线程释放锁后才能进入…

项目写交付文档,数据库文档生成

我们可以使用工具,快速生成数据库文档,地址是:https://gitee.com/dotnetchina/DBCHM/releases

2025年琉璃瓦厂家推荐排行榜:哪家好?哪家靠谱?选哪家?——基于 CNPP 榜单的对比评测

一、用户在搜这些词时,其实要解决什么决策问题? 典型检索词:“琉璃瓦厂家” “琉璃瓦厂家推荐” “琉璃瓦厂家排行榜” “琉璃瓦厂家哪家好” “琉璃瓦厂家选哪家” “琉璃瓦厂家哪家靠谱”背后的共同需求不是“看广…

Kafka在Spring Boot生态中的浅析与应用 - 教程

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

2025年11月成都电线电缆厂家最新推荐,高压电缆、中压电缆、低压电缆、铜芯电缆、铝芯电缆、企业综合服务能力与产品特色深度解析

随着西南地区基础设施建设持续升级,以及新能源、轨道交通等领域的快速发展,各类工程项目对线缆产品的品质要求与日俱增。用户在选购线缆产品时面临诸多考量——如何辨别企业综合实力、如何匹配项目需求的产品规格、如…

2025 年最新屏蔽泵厂家排行榜:高温 / 自吸 / 化工等多类型屏蔽泵最新推荐,助力企业精准选品立式 / 液下 / 多级 / 维修 / 低温 / 液化气屏蔽泵推荐

引言 当前,锂电新能源、新材料、煤化工、环保、制药等领域飞速发展,对实现无泄漏输送的屏蔽泵需求日益增长。但市场上屏蔽泵品牌繁杂,产品质量参差不齐,部分企业技术落后、设备陈旧,导致产品在高温、高压等特殊工…

NeurIPS 2025|让AI读懂第一视角的“内心独白”!浙大等联合突破性实现自我中心视频推理

NeurIPS 2025|让AI读懂第一视角的“内心独白”!浙大等联合突破性实现自我中心视频推理论文名称:EgoThinker: Unveiling Egocentric Reasoning with Spatio-Temporal CoT 发布时间:2025年10月28日 👉一键直达论文 …

实验5 MapReduce初级编程实践

实验步骤 (一)编程实现文件合并和去重操作 对于两个输入文件,即文件A和文件B,请编写MapReduce程序,对两个文件进行合并,并剔除其中重复的内容,得到一个新的输出文件C。下面是输入文件和输出文件的一个样例供参考…

2025年燃气低氮热水锅炉加工厂权威推荐榜单:家庭燃气热水锅炉/立式卧式燃气热水锅炉/半吨燃气热水锅炉设备源头厂家精选

燃气低氮热水锅炉作为现代清洁供热系统的核心装备,其氮氧化物排放水平、热效率及运行稳定性直接关系到用户的环保合规性、运营成本与系统可靠性。随着"双碳"政策推进与环保标准的提升,市场对超低氮排放、高…