最大匹配和最小覆盖学习笔记

这篇博客详细介绍了二分图的最大匹配和最小覆盖问题,通过公牛母牛配对的例子解释了匈牙利算法,并给出了算法的具体实现。内容包括二分图最大匹配的模板题和算法讲解,以及二分图最小覆盖的问题描述和解决方案,阐述了最大匹配与最小点覆盖之间的关系。
摘要由CSDN通过智能技术生成

博客园的博客

二分图最大匹配

题目转载———caioj.cn

模板题(公牛母牛配)

题目描述

n n n只公牛和 m m m只母牛,
某些公牛和某些母牛互相喜欢。
但最后一只公牛只能和一只母牛建立一对一匹配。
要使得最后牛群匹配对数最大。

输入格式

第一行三个整数 n , m , k ( 1 ≤ n , m ≤ 1 0 4 , 0 &lt; k ≤ 1 0 5 ) n,m,k(1\leq n,m\leq10^{4},0&lt;k\leq10^{5}) n,m,k(1n,m104,0<k105)
接下来 k k k行,每行两个整数 x , y , x,y, x,y,表示一条边,连接 X X X集合中 x x x点和 Y Y Y集合的 y y y点。

输出格式

只有一行。输出一个整数,表示牛群匹配对数最大值。

样例

输入

5 5 9
1 2
2 2
2 3
2 5
3 1
3 3
4 1
5 3
5 4

输出

5

算法讲解(重点)

此处引用老师的总结
公 牛 母 牛 配 公牛母牛配
— — 匈 牙 利 算 法 的 通 俗 解 释 ——匈牙利算法的通俗解释
二分图匹配问题是各类比赛的热门内容。涉及到的算法有:二分图最大匹配,二分图最佳匹配, K o ¨ n i g König Ko¨nig定理(最小覆盖问题)的证明与应用等等,但这些算法的根源在于匈牙利算法深透理解。
本文试图用通俗的讲解引导初学者了解匈牙利算法的操作细节。介于许多学生用交错轨解释匈牙利算法感到难以理解,本人写了这篇文章,算是一个尝试,希望给读者带来轻松的阅读。如果初学者看懂了这篇文章,还是要在百度查查关于匈牙利算法的专业描述,这样有助于后续内容的学习。
二分图:
顶点可以分类两个集合X和Y,所有的边关联的两个顶点,恰好一个属于集合X,另一个属于集合Y。图一般整理好之后如下:

最大二分匹配:
假设 X X X集合是公牛集合, Y Y Y集合是母牛集合,一条连接点 x i x_{i} xi到点 y i y_{i} yi的边,表示公牛 x i x_{i} xi可以和母牛 y i y_{i} yi可以配对。在一夫一妻制的前提下,求最大的配对数。这个问题可以用匈牙利算法解决。
【问题背景】
n只公牛和m只母牛,
某些公牛和某些母牛互相喜欢。
但最后一只公牛只能和一只母牛建立一对一匹配。
要使得最后牛群匹配对数最大。
【输入】
第一行三个整数 n , m , k ( 1 ≤ n , m ≤ 1 0 4 , 0 &lt; k ≤ 1 0 5 ) n,m,k(1\leq n,m\leq10^{4},0&lt;k\leq10^{5}) n,m,k(1n,m104,0<k105)
下来 k k k行,每行两个整数 x , y , x,y, x,y,表示一条边,连接 X X X集合中 x x x点和 Y Y Y集合的 y y y点。
【输出】
只有一行。输出一个整数,表示牛群匹配对数最大值.
input:
5 5 9
1 2
2 2
2 3
2 5
3 1
3 3
4 1
5 3
5 4
output
5


匈牙利算法:公牛逐个找母牛匹配。公牛 x 1 x_1 x1与母牛 y 1 y_1 y1有匹配关系 ( m a p [ x 1 , y 1 ] = = t r u e ) , (map[x_1,y_1]==true), map[x1,y1]==true)如果母牛 y 1 y1 y1尚未匹配 ( m a t c h [ y 1 ] = = 0 ) , (match[y_1]==0), match[

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值