二分匹配及其应用_第1页
二分匹配及其应用_第2页
二分匹配及其应用_第3页
二分匹配及其应用_第4页
二分匹配及其应用_第5页
已阅读5页,还剩30页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、ACM程序设计程序设计杭州电子科技大学 刘春英2022-3-232今天,今天,你开始你开始 了吗?了吗?复习2022-3-233本周双星本周双星(1 12 2):):zhanlangzhanlang2022-3-234第十第十三三讲讲二分图及其应用二分图及其应用(Bipartite Graph)2022-3-235主要内容主要内容n什么是二分图什么是二分图n二分图的最大匹配二分图的最大匹配n匈牙利算法匈牙利算法n二分图的最小顶点覆盖二分图的最小顶点覆盖nDAGDAG图的最小路径覆盖图的最小路径覆盖n二分图的最大独立集二分图的最大独立集n处理技巧处理技巧2022-3-236什么是二分图?什么是二

2、分图?n如果一个图的顶点可以分为两个集合如果一个图的顶点可以分为两个集合X X和和Y Y,图的所有边一定是有一个顶点属于集,图的所有边一定是有一个顶点属于集合合X X,另一个顶点属于集合,另一个顶点属于集合Y Y,则称该图,则称该图为为“二分图二分图”( Bipartite Graph Bipartite Graph )2022-3-237例例1 1:婚配问题:婚配问题男男女女2022-3-238二分图的最大匹配二分图的最大匹配在二分图的应用中,最常见的就是在二分图的应用中,最常见的就是最大匹配最大匹配问题,很多其他的问题都可以通过转化为匹问题,很多其他的问题都可以通过转化为匹配问题来解决。配

3、问题来解决。2022-3-239如何求二分图的最大如何求二分图的最大匹配呢?匹配呢?2022-3-2310经典算法:经典算法:匈牙利算法匈牙利算法2022-3-2311匈牙利算法匈牙利算法( (求二分图最大匹配求二分图最大匹配) )n谈匈牙利算法自然避不开谈匈牙利算法自然避不开HallHall定理定理nHallHall定理:对于二分图定理:对于二分图G G,存在一个匹配,存在一个匹配M M,使得使得X X的所有顶点关于的所有顶点关于M M饱和的充要条件是:饱和的充要条件是:对于对于X X的任意一个子集的任意一个子集A A,和,和A A邻接的点集为邻接的点集为T(A)T(A),恒有:,恒有: |

4、T(A)| = |A| |T(A)| = |A| 2022-3-2312图示(图示(1 1):):男1男2女1女2女3返回2022-3-2313图示(图示(2 2):):男1男2女1女2女3返回X0=男2V1=男2V2 = T(V1)=女1Y=女1V1=男2,男1V2 =女1Y=女2MM E(P)( 其中,P是从x0 y的可增广道路 )2022-3-2314匈牙利算法匈牙利算法基本步骤基本步骤:n1 1任给初始匹配任给初始匹配M M; n2 2若若X X已饱和已饱和则结束,则结束,否则否则进行第进行第3 3步;步; n3 3在在X X中找到一个非饱和顶点中找到一个非饱和顶点x0 x0, 作作V

5、1 x0, V2 V1 x0, V2 ; n4 4若若T(V1) = V2T(V1) = V2则因为无法匹配而停止,否则因为无法匹配而停止,否则任选一点则任选一点y T(V1)V2y T(V1)V2; n5 5若若y y已饱和则转已饱和则转6 6,否则做一条从,否则做一条从x0 yx0 y的的可增广道路可增广道路P P,MMMM E(P)E(P),转,转2 2; n6 6由于由于y y已饱和,所以已饱和,所以M M中有一条边中有一条边(y,z)(y,z),作,作 V1 V1 z, V2 V2 yV1 V1 z, V2 V2 y, 转转4 4; 2022-3-2315图示图示(3 3):):男男

6、1男男2女女1女女2返回X0=X0=男男2 2V1=V1=男男22V2 = V2 = T(V1)=T(V1)=女女11T(V1) != V2T(V1) != V2Y=Y=女女1 1V1=V1=男男2 2,男,男11V2 =V2 =女女11T(V1)=V2T(V1)=V22022-3-2316NOTE:真正求二分图的最大匹配真正求二分图的最大匹配的题目很少,往往做一些的题目很少,往往做一些简单的变化,比如简单的变化,比如2022-3-2317变种变种1 1:二分图的最小顶点覆盖:二分图的最小顶点覆盖在二分图中求最少的点,让每条边都在二分图中求最少的点,让每条边都至少和其中的一个点关联,这就是至少

7、和其中的一个点关联,这就是二分图的二分图的“最小顶点覆盖最小顶点覆盖”。2022-3-2318实实 例例 分分 析析2022-3-2319例例2 2:严禁早恋,违者开除!:严禁早恋,违者开除!男生男生女生女生2022-3-2320例例3 3:HDOJ_1150 HDOJ_1150 任务安排任务安排有两台机器有两台机器A A和和B B以及以及N N个需要运行的任务。每个需要运行的任务。每台机器有台机器有M M种不同的模式,而每个任务都恰好种不同的模式,而每个任务都恰好在一台机器上运行。如果它在机器在一台机器上运行。如果它在机器A A上运行,上运行,则机器则机器A A需要设置为模式需要设置为模式a

8、i,ai,如果它在机器如果它在机器B B上上运行,则机器运行,则机器A A需要设置为模式需要设置为模式bibi。每台机器。每台机器上的任务可以按照任意顺序执行,但是每台机上的任务可以按照任意顺序执行,但是每台机器每转换一次模式需要重启一次。请合理为每器每转换一次模式需要重启一次。请合理为每个任务安排一台机器并合理安排顺序,使得机个任务安排一台机器并合理安排顺序,使得机器重启次数尽量少。器重启次数尽量少。ACM/ICPC Beijing 2002ACM/ICPC Beijing 20022022-3-2321图示:图示:结论:结论:二分图的最小二分图的最小顶点覆盖数顶点覆盖数 = =二分图的最大

9、二分图的最大匹配数匹配数a0a1a2a3a4b0b1b2b3b42022-3-2322特别说明特别说明: :n此题需要注意的一点,具体参见:此题需要注意的一点,具体参见: 2022-3-2323变种变种2 2:DAGDAG图的最小路径覆盖图的最小路径覆盖用尽量少的不相交简单路径覆盖有向用尽量少的不相交简单路径覆盖有向无环图无环图(DAG)G(DAG)G的所有顶点,这就是的所有顶点,这就是DAGDAG图的最小路径覆盖问题。图的最小路径覆盖问题。2022-3-2324例例4:HDOJ_1151 Air RaidHDOJ_1151 Air Raid有一个城镇,它的所有街道都是单有一个城镇,它的所有街

10、道都是单行的,并且每条街道都是和两个路口行的,并且每条街道都是和两个路口相连。同时已知街道不会形成回路。相连。同时已知街道不会形成回路。你的任务是编写程序求最小数量的你的任务是编写程序求最小数量的伞兵,这些伞兵可以访问(伞兵,这些伞兵可以访问(visitvisit)所)所有的路口。对于伞兵的起始降落点不有的路口。对于伞兵的起始降落点不做限制。做限制。2022-3-2325Input:433 41 32 3Output: 2样本数据:样本数据:2022-3-2326“空袭空袭”示意图示意图1234432113242022-3-2327结论:结论:DAGDAG图的最小路径覆盖数图的最小路径覆盖数=

11、 =节点数(节点数(n n)- - 最大匹配数(最大匹配数(m m)关键:关键:求二分图的最大匹配数求二分图的最大匹配数2022-3-2328变种变种3:3:二分图的最大独立集二分图的最大独立集HDOJ_1068 Girls and BoysHDOJ_1068 Girls and Boys 大学二年级的时候,一些同学开始研究大学二年级的时候,一些同学开始研究男女同学之间的缘分。研究者试图找出男女同学之间的缘分。研究者试图找出没有缘分同学的最大集。程序的结果就没有缘分同学的最大集。程序的结果就是要输出这个集合中学生的数量。是要输出这个集合中学生的数量。2022-3-2329样本数据:样本数据:输

12、入:输入:70: (3) 4 5 61: (2) 4 62: (0)3: (0)4: (2) 0 15: (1) 06: (2) 0 1输出:输出:5 5 2022-3-233000154326543216“Girls and Boys”示意图示意图2022-3-2331结论:结论:二分图的最大独立集数二分图的最大独立集数= =节点数(节点数(n n) 最大匹配数(最大匹配数(m m)关键:关键:求二分图的最大匹配数求二分图的最大匹配数2022-3-2332Any Questions?Any Questions?2022-3-2333相关练习n201003201003ACMACM程序程序设计设

13、计在在线线作作业业(1313) 二分匹配二分匹配2022-3-2334附:参考源码(HDOJ-1150)/*hdoj_1150匈牙利算法 月下版 */#include#include#includeusing namespace std;bool mark1100,mark2100;int list100;int n,m,edge,num;vectorvector v;bool dfs(int to)register int i,point,s = listto;for(i=0;ivs.size();i+)point = vsi;if(!mark2point)continue;mark2poi

14、nt = false;if(listpoint=-1 | dfs(point)listpoint = s;return true;return false; void Solve()int i,j,point;bool flog = false;memset(mark1,true,sizeof(mark1);memset(list,-1,sizeof(list);num=0;for(i=0;in;i+)for(j=0;jvi.size();j+)if(listvij = -1)mark1i = false;listvij = i;num+;if(i=0) flog = true;break; for(i=0;in;i+)if(mark1i)if(!vi.empty()memset(mark2,true,sizeof(mark2);for(j=0;jvi.size();j+)point = vij;if(!mark2point) continue;mark2point = false;if(listpoint = -1 | dfs(point)listpoint = i;num+;break;

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论