算法合集之《浅析二分图匹配在信息学竞赛中的应用》
浅析二分图匹配在信息学竞赛中的应用

浅析二分图匹配在信息学竞赛中的应用[摘要]本文通过对几道信息学竞赛题目的分析,举例说明了二分图匹配在信息学竞赛中的应用。
二分图匹配的应用一般是通过分析某些最优化问题的性质,构造出二分图,再通过求得该二分图的最大匹配,最佳匹配等各种形式的匹配从而解决原问题。
[关键字]匹配二分图最小权最大权优化[正文]一引言二分图匹配是信息学竞赛中一类经典的图论算法,在近年来信息学竞赛中有广泛应用。
如果可以以某一种方式将题目中的对象分成两个互补的集合,而需要求得它们之间满足某种条件的一一对应的关系时,往往可以抽象出对象以及对象之间的关系构造二分图,然后利用匹配算法来解决。
这类题目通常需要考察选手对原题进行建模,构造二分图,设计匹配算法,并对其算法进行适当优化等多方面能力。
下面就通过两道例题来说明二分图匹配在信息学竞赛中的一些应用。
二Railway Communication1** 问题描述某国有n个城镇,m条单向铁路。
每条铁路都连接着两个不同的城镇,且该铁路系统中不存在环。
现需要确定一些列车运行线,使其满足:I)每条铁路最多属于一条列车运行线;II)每个城镇最多被一条列车运行线通过(通过包括作为起点或终点);III)每个城镇至少被一条列车运行线通过;IV)列车运行线的数量应尽量小。
V)在满足以上条件下列车运行线的长度和应该尽量小。
1Saratov State University 252. Railway Communication** 问题分析题目要求列车运行线数最少,又要求在此条件下列车运行线的长度和最小,不便于一起考虑,我们不妨分步研究,先考虑列车运行线数最少的子问题。
则该子问题可建立如下数学模型:给定一个有向无环图G 0=(N 0,A 0),用尽量少的不相交的简单路径覆盖N 0。
我们可以给问题建立一个二分图G =(N ,A ),如图2。
a) 建立两个互补的结点集合X 和Y ,把点i (0i N ∈)拆成X 结点i 和Y 结点i'。
图匹配总结二分图匹配

序言:回忆起最初学习图匹配算法的艰辛与困惑,苦中有乐,但很多时间都浪费在了资料的寻找与甄别上。
因此,在对自己做一次知识总结的同时,整理与记录下了这些文字,希望能够给大家带来一定的帮助。
目录:第一部分:二分图的最大匹配第二部分:五种方式,两类构图第三部分:二分图匹配算法总结第四部分:二分图的最优权值匹配第五部分:一般图的最大匹配第六部分:图匹配题目列表符号说明:N,V:点数E:边数u,v,i,j:节点的标号INF:正无穷大-INF:负无穷大名词说明:时间复杂度:算法的理论时间上界时间效率:实际中算法运行的平均时间效率引用说明:文中参考了一些来源于网络的资料,也有原文全段引用的部分。
在这些资料被n+1次转载后,我已无法获知所有原作者的信息。
在此,对所有前辈们表示真诚的歉意和诚挚的敬意。
特别感谢Amber大神犀利的代码。
作者:Snow_storm正文:第一部分:二分图匹配有这么两个奇怪的工厂:工厂X只生产杯具,工厂Y只生产洗具。
最近,两个工厂决定将产品实行打包策略:即一个杯具搭配上一个洗具。
但由于杯具和洗具的形状和功能各不相同,对于某个类别的杯具来说,只能搭配某些类型的洗具。
现在,两个工厂的厂长大人想知道最多能成功的搭配多少对杯具与洗具。
类似于上面例子中提到的搭配问题,在图论中的有规范的名称:匹配。
注意到,上面的例子中涉及到的物品只有两类(杯具与洗具),且问题只涉及杯具与洗具的匹配,我们把这种只涉及一种关系的匹配问题称为二分匹配问题。
现在,让我们理清一些概念。
二分图:若图G中的点可以分为X和Y两部分,且每部分内部无任何边相连,则称图G为二分图。
匹配:无公共点的边集合(可以想象一下结婚这个词汇)。
匹配数:边集中边的个数最大匹配:匹配数最大的匹配。
如图1-1,展示的就是一个二分图:粗体线表示该二分图的一种匹配方式,不难发现,此时的匹配已经是最大匹配。
图 1-1如何能得到一个二分图的最大匹配?运用简单的枚举:找出全部匹配,然后保留匹配数最多的。
信息学竞赛算法分析与设计

——算法分析与设计
1
本节课程内容
二分图、匹配
(bipartite graph、matching)
匈 牙 利 算 法 Kuhn-Munkras算法
2
二分图的概念
二分图又称作二部图,是图论中的一种特殊模 型。 设G=(V,{R})是一个无向图。如顶点集V可分割 为两个互不相交的子集,并且图中每条边依附 的两个顶点都分属两个不同的子集。则称图G 为二分图。
M⊕P = M∪P \ M∩P, 是对称差.
⑤ 将yj在M中与之邻接的点xk ,给以标号 j 和标记*, 转向②.
15
例 求下图所示二部图G的最大匹配.
解 ① 取初始匹配M0 ={x2 y2 , x3 y3 , x5 y5} (上图粗线所示). ② 给X中M0的两个非饱和点x1,x4都给以标 号0和标记* (如下图所示).
(1)置M为空 (2)找出一条增广路径P,通过取反操作获得 更大的匹配M’代替M (3)重复(2)操作直到找不出增广路径为止
7
任给初始匹配
M饱和V1 N 找xV1为非饱和点 S={x},T= N(s)=T? N 取yN(s)-T Y已经饱和 N Y 无法继续匹配,停止 Y 停止,M为最大 匹配
12
匈牙利算法
int main() { while(init()) { for(int i=1;i<=n;i++) { memset(b,0,sizeof(b)); if(find(i)) ans++; } printf("%d\n",ans); } }
13
求二部图G = ( X, Y, E )的(匈牙利算法)迭代步骤:
二分图匹配及其应用

二分图匹配及其应用一、二分图基本概念1.二分图:无向图G的顶点集V分成两部分x和y,G中每条边的两个端点一定是一个属于x而另一个属于y,因此二分图可简记为G=(x,y,E)2.怎样判别二分图二分图的邻接矩阵一般具有如下形式对于较简单的图,可以直观地判断是否为二分图。
对于较复杂的图,可根据下列定义判断。
定理:当且仅当无向图G的每一个回路的长度均为偶数时,G是一个二分图。
如果无回路,相当于任一回路的长度为0,而0视为偶数。
证明:分别从必要性和充分性求证。
必要性:若G是二分图,则G的任一回路的长度为偶数。
设G中任一长度为m的回路C=Vi0,Vi1,…,Vi m-1,Vi m。
因G是二分图,因此可将V分为两个互补顶点子集V1和V2,对C来讲,将下标为偶数的顶点属于V1,下标为奇数的顶点属于V2,即Vi0,Vi2,…,Vi m-2∈V1,Vi1,Vi3,…,Vi m-1∈V2。
因m-1为奇数,故m为偶数。
充分性:若G的任一回路的长度为偶数时,G必是二分图,分两种情况讨论。
(1)G是连通图。
将图的顶点集合V按下列定义分为两个子集V1={Vi|V i与某一指定顶点V0的距离为偶数},V2=V-V1下面证明,对于任一边e=(V i,V j)∈E,若V i∈V1,则V j∈V2设G中任一条边e=(Vi,Vj),如果e的两个端点V i和V j都在V1中,则得到一个回路C=V i,…,V0,…,V j,V i因Vi,Vj∈V1,按定义V i和V j到V0的距离都是偶数,再加上边e,故回路C的长度为奇数,与题设矛盾,说明V i,V j不可能都在V i中。
如果e的两个端点V i和V j都在V2中,则按定义V i和V j到V0的距离都是奇数,再加上边e,故回路C的长度亦为奇数,与题设矛盾,说明V i和V j也不可能都处于V2中。
因此只有唯一一种可能,即e的两个端点,一个在V1中,另一个在V2中,由于e为G中任一条边,根据二分图定义,G是二分图。
二分图匹配及其应用-PPT精品

例题4. Unstable Systems(SGU218)
• 求一个完备匹配,使得匹配边中权值最大 的边权值最小。
分析
• 算法一
– 二分选择flow,并且进行最大匹配
• 算法二
– 从权值最低的边开始,每次增加一条边。维护 交错树森林,最多只可能增加一个交错轨。
– 因为找到N条交错轨即可,而维护交错树森林 的平摊复杂度为O(1),所以总时间复杂度依然 为O(N3)
– 时间复杂度 O ( n m )
• 基于DFS的算法: 每次选一个未盖点u进行DFS. 如果找不到 增广路则换一个未盖点, 且以后再也不从u出发找增广路.
Hopcroft算法
• 可以证明:如果每次找到的最短增广路集是极大 的,则只需要增广O ( n ) 次
• 关键:用O(m)时间找一个极大最短增广路集 • 步骤1:用距离标号扩展匈牙利树,找到第一个
• 实际上不需要单独建立二分图,直接在图 上操作即可。 点和边都是O(N2)个, 因此时 间复杂度为O(N3)
例题3. Speleology(POI9906)
• 一个山上有一个很大的洞,其中有n个室, 编号为1~n,室与室之间有通道。编号越大 的室在越下方。有一批洞穴学者要从编号 为1的室走到编号为n的室中,途中他们只 能从编号小的地方走到编号大的地方。每 条和1或n相连的通道只允许一个人通过。 问:最多可以有多少名洞穴学者?
分析
• 可以用二分图的最佳匹配 • 因为这个图有特殊性,男孩子一边任一个
点连出的所有边的权值都是相同的,所以 只要将男孩子按照国王的喜欢程度从大到 小排序,先对国王更喜欢的孩子扩展增广 路径,就可以得到最优解。这是为什么呢?
分析
• 由增广路的性质可以知道一条增广路的应 用只可能在匹配的男孩子中加入一个人, 而不可能删去任意一个人。
二分图匹配问题最大匹配以及相关结论多重匹配最大带权匹配带花树算法

⼆分图匹配问题最⼤匹配以及相关结论多重匹配最⼤带权匹配带花树算法⼆分图匹配问题:做法:①匈⽛利算法,时间复杂度O(N*V)②Hopcroft-Karp,时间复杂度O(√N*V)相关结论:①最⼩顶点覆盖(könig定理) ⼆分图的最⼩顶点覆盖=最⼤匹配数②最⼩路径覆盖(不要求⼆分图):在图中找⼀些路径,使之覆盖了图中的所有顶点,且任何⼀个顶点有且只有⼀条路径与之关 最⼩路径覆盖 = 顶点数 - 最⼤匹配配对于有向⽆环图,⾸先拆点,建成⼆分图再进⾏求解·最⼩不相交路径覆盖 建图⽅式:把⼀个的点V拆点成Vx和Vy,如果A连向B,那么就建⼀条Ax连向By的边。
图中有多少条路径,可以以⼀种⽅法得到,就是计算出度为0的点的个数。
如果知道这个就很容易得出这个结论了 ·最⼩相交路径覆盖 做法⾸先跑floyd,求出原图的传递闭包,然后⽤上述⽅法做即可③最⼩边覆盖最⼩边覆盖=图顶点-最⼤匹配⾸先⼀开始,假如⼀条边都不选的话,要覆盖所有的点就必须每个点都选⼀次,也就是n次,然后每选⼀条边就会减少1个,所以结论显⽽易见④最⼤独⽴集最⼤独⽴集=图顶点-最⼤匹配=最⼩边覆盖⼆分图的独⽴数等于顶点数减去最⼤匹配数,很显然的把最⼤匹配两端的点都从顶点集中去掉这个时候剩余的点是独⽴集,这是|V|-2*|M|,同时必然可以从每条匹配边的两端取⼀个点加⼊独⽴集并且保持其独⽴集性质。
⼆分图多重匹配( ⼀ ) 如果x部节点只对应⼀个y部节点,⽽y部节点可以对应多个x部节点,那么这种匹配可以⽤匈⽛利算法来解决解决的问题:⼀个y最多匹配cnt个x是否成⽴,要问⼀个y匹配⼈数最⼤的最⼩值可以⽤⼆分答案来做解决思路:根据匈⽛利算法的思想,这时的link[u]要变成link[u][i],表⽰与y[u]匹配好了的第i个点,⽤vlink[u]记录已经于u点匹配了的点的个数,对于x中的x[k],找到⼀个与他相连的y[i]后,同样判断匈⽛利算法中的两个条件是否成⽴,若满⾜第⼀个条件,直接将x[k],y[i]匹配,否则,如果与y[i]所匹配的点已经达到了饱和,那么在所有与y[i]配合的点中选⼀个点,检查能否找到增⼴路,如果能,就让出位置让x[k]与y[i]匹配( ⼆ )如果x部节点可以匹配多个y部节点,y部节点可以同时匹配多个x部节点,那么应该⽤⽹络流来解决。
算法合集之《浅析二分图匹配在信息学竞赛中的应用》

05 二分图匹配的实践案例
最大二分匹配问题的应用案例
最大二分匹配问题
在二分图中寻找最大的匹配数,使得每条边只被匹配一次。
应用案例
社交网络中的好友推荐。通过最大二分匹配算法,可以找到社 交网络中最多共同好友的两个人,从而推荐他们成为好友。
算法实现
使用匈牙利算法或Kuhn-Munkres算法求解最大二分匹配 问题。
剪枝策略
剪枝条件
在匹配过程中,根据一定的条件判断是否可以剪去当前分支 ,以减少不必要的计算量。
剪枝操作
在匹配过程中,根据剪枝条件进行剪枝操作,避免匹配到不 可能的解。
并查集策略
并查集初始化
在处理二分图匹配问题之前,将图中 的节点按照所属类别进行初始化。
并查集合并操作
在匹配过程中,根据并查集的合并操 作快速判断一条边是否存在于图中, 提高匹配效率。
算法实现
使用匈牙利算法、Kuhn-Munkres算法等经典算法,通过寻找 增广路径和增广回溯的方式求解最大二分匹配。
应用场景
在信息学竞赛中,最大二分匹配问题常用于解决诸如排班、分配 等问题,具有广泛的实际应用价值。
二分图的顶点覆盖问题
二分图的顶点覆盖问题
01
在二分图中寻找最小的顶点集合,使得该集合覆盖所
算法合集之《浅析二分图匹 配在信息学竞赛中的应用》
目录
Contents
• 二分图匹配概述 • 二分图匹配的算法 • 二分图匹配在信息学竞赛中的应用 • 二分图匹配的优化策略 • 二分图匹配的实践案例
01 二分图匹配概述
二分图匹配的定义
二分图匹配是指将一个二分图中的顶 点划分为两个不相交的子集,使得每 个子集中的顶点之间没有边相连,而 两个子集之间通过边相连。
浅析二分图匹配在信息学竞赛中的应用44页文档

•
46、寓形宇内复几时,曷不委心任去 留。
•
47、采菊东篱下,悠然见南山。
•
48、啸傲东轩下,聊复得此生。
•
49、勤学如春起之Biblioteka ,不见其增,日 有所长 。•
50、环堵萧然,不蔽风日;短褐穿结 ,箪瓢 屡空, 晏如也 。
41、学问是异常珍贵的东西,从任何源泉吸 收都不可耻。——阿卜·日·法拉兹
42、只有在人群中间,才能认识自 己。——德国
43、重复别人所说的话,只需要教育; 而要挑战别人所说的话,则需要头脑。—— 玛丽·佩蒂博恩·普尔
44、卓越的人一大优点是:在不利与艰 难的遭遇里百折不饶。——贝多芬
45、自己的饭量自己知道。——苏联
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
t1 u
t2
t3
Dt1≤ Du ; Dt2≤ Du ; Dt3≤ Du
初步分析
对边v,u如果满足条件u∈/ T ,v∈Pu,
则称u可替换v。
如果边v,u(u可替换v),则必须满足 Dv≤ Du ,否则用u替换v可得到一棵权值更 小的生成树T-v+u 。
初步分析
不等式Dv≤Du中v总为树边,而u总为
的集合。
初步分析
,t2t,2如,那t右t33中连图么接任,用了u意非∈u/ 一的树T,两条边t个1都,u端代可t2点,替以,t3树∈得所T边到以,t一1且,t1 P棵u={新t1,的t2生,成t3}。树。
而如果u的边权比所替换的 边的边权更小的话,则可以得 到一棵权值更小的生成树。
那么要使原生成树T是一棵 最小生成树,必须满足条件:
X'
Y'
1
1
2
2
3
3
4
4
5
6
7
在X'结点i和Y'结点i之间添加边(i,i)。
构造二分图G' X'
1
2
3
4
Y'
1 C1 2 C2 3 C3 4 C4 5 C5 6 C6
7 C7
给每个Y'结点i一个权值Ci。如果点i被匹配则 得到权值Ci,否则得到权值0。
算法分析
设 Ci ai T
[引理]对于图G中的任何一个完备匹配M,都可 以在图G'中找到一个唯一的完备匹配M'与其对
X'
Y'
1
1
2
2
3
3
4
4
5
6
7
同样建立两个互补的结点集合X',Y'。 X'结点i表示树边ai(ai∈T), Y'结点j表示任意边 aj(aj∈V0)。
构造二分图G'
X'
Y'
1
1
2
2
3
3
4
4
5
6
7
如果图G0中,aj 可替换ai,且Ci-Cj>0,则在X' 结点i和Y'结点j之间添加边(i,j)。
构造二分图G'
预处理的时间复杂度为O(|E|) KM算法的时间复杂度为O(|V||E|)
由于图G是二分完全图。
|V|=2max{n – 1, m – n + 1}=O(m) |E|=|V|2=O(m2)
所以算法总时间复杂度了许多虚 结点和虚边,但其并没 有太多实际意义。
应,且SM = μ-SM'。对于图G'中的任何一个完备
匹配M',同样可以在图G中找到一组以M为代表
设M为图G的最大权匹配,显然M也是完备匹配, 则满足
li rj Wi, j (i, j)M
设完备匹配X的所有匹配边的权值和为SX,则
SM
Wi, j li rj
(i, j)M
iX
jY
显然,此时的可行顶标之和取到最小值。
算法分析
因为虚结点Xi的匹配边肯定是权值为0的虚边, 所以li=0。同理对于虚结点Yj,rj = 0。
我们来构造二分图G
X
Y
1
5
2
6
3
7
4
建立两个互补的结点集合X,Y。 X结点i表示图G0中树边ai(ai∈T)。 Y结点j表示图G0中非树边aj(aj∈/ T)。 设这些结点均为实点。
构造二分图G
X
Y
1
5
2
6
3
7
4
如果图G0中,aj 可替换ai,且Ci-Cj>0,则在X结点i和 Y结点j之间添加边(i,j), 边权Wi,j=Ci-Cj。
那问题就是求出所有的Δ使其满足以上不等式且:
m
f i i 1
最小。
观察此不等式
大家或许会v发现这u 个不C等v 式C似u曾相识!
这就是在求二分图最佳匹配的经典KM算法中 不其可中或不缺等的号一右个侧不C等v-式C。u是一个已知量!
KM算法中,首先给二分图的每个顶点都设一个 可行顶标,X结点i为li,Y结点j为rj。从始至终,边权 为Wv,u的边(v,u)都需要满足lv + ru ≥Wv,u 。
浅析二分图匹配 在信息学竞赛中的应用
长郡中学 王俊
引言
二分图匹配是一类经典的图论算法, 在近年来信息学竞赛中有广泛的应用。
二分图和匹配的基础知识已经在前辈 的集训队论文中有过介绍,本文主要通过 一道例题研究其应用。
[例题] Roads
给定一个无向图G0=(V0,E0,C),V0为顶点 集合,E0为边集合(无重边),C为边权(非负整数) 。设n= |V0|,m= |E0|,E0中前n-1条边构成一棵生成树 T。请将边权进行如下修改,即对于e∈E,把Ce修改 成De(De也为非负整数),使得树T成为图G的一棵最 小生成树。修改的代价定义为:
m
SM li rj
li
rj i f
iX
jY
iX 且i为实点
jY 且j为实点
i 1
显然,SM即是满足树T是图G0的一棵最小生 成树的最小代价。那么问题就转化为求图G的最
大权完备匹配M,即可用KM算法求解。
复杂度分析
我们来分析一下该算法的时间复杂度。
设这些边均为实边。
构造二分图G
X
Y
1
5
2
6
3
7
4
8
在结点数少的一侧添加虚结点,使得X结点和Y结 点的数目相等。
构造二分图G
X
Y
1
5
2
6
3
7
4
8
如果X结点i和Y结点j之间没有边,则添加一条权 值为0的虚边(i,j)。
算法分析
对于图G的任意一个完备匹配X,都有
li rj Wi, j (i, j) X
f Ce De eE
请求出修改的最小代价。
1
1
6
4
2
4 25
2
4 23
3
34
27
3
34
44
5 5
f=|6-4|+|2-2|+|5-3|+|7-4|+|3-3|+|2-4|+|4-4|=9
初步分析
根据与树T的关系,我们可以把图G0中的边分成
树边与非树边两类。 设Pe表示边e的两个端点之间的树的路径中边
非树边。 那么显然树边的边权应该减小(或不变),
而非树边的边权则应该增大(或不变)。 设边权的修改量为Δ,即 Δe=|De-Ce|
当e∈T, Δe=Ce-De,即De=Ce-Δe
当e∈/ T, Δe=De-Ce, 即De=Ce+Δe
初步分析
那么当u可替换v时,由不等式
Dv Du
Cv v Cu u v u Cv Cu
那么,算法中是否 存在大量冗余呢?还有 没有优化的余地呢?
算法分析
答案是肯定的,如果不添加这些虚结点和虚 边,可以得到更好的算法。
匹配 下面就介绍一种更优秀的
算法!
前面用KM算法解此题时构造了一个边 上带有权值的二分图。其实不妨换一种思路, 将权值由边转移到点上,或许会有新的发现。
构造二分图G'