图论专题 二分图
图论——二分图1:二分图以及判定
图论——⼆分图1:⼆分图以及判定
图,有有向图,⽆向图,稠密图,简单图······
算法,有贪⼼法,⼆分法,模拟法,倍增法······
那,⼆分图是啥?
⼆分法+有向图?
于是,我查了许多资料,才对它有⼀定了解。
⼆分图:⼆分图,是图论中的⼀种特殊模型,设G=(V,E)是⼀个⽆向图,如果顶点V可分割为两个互不相交的⼦集(A,B),并且同⼀集合中不同的两点没有边相连。
这就是⼆分图。
举个栗⼦吧:
这是不是⼆分图?
反正我第⼀次看觉得不是
其实,是的,他是⼆分图,尽管看上去是连着的。若我们将图中的⼀些边转⼀下,变成:
这就是⼀个明显的⼆分图。
集合A与B中的点互不相连。
因此,在⼿动判定⼆分图时学会转边!
辣魔,⼆分图要⽤计算机判定怎么实现?
数竞⼤佬:简单!
!!!染⾊⼤法!!!
有没有熟悉的感觉
0表⽰还未访问,1表⽰在集合A中,2表⽰在集合B中。
col(color)储存颜⾊。
初始化为0.
上代码:
其实是模板
可以记忆。
1 vector <int> v[N];
2void dfs(int x,int y){
3 col[x]=y;
4for (int i=0; i<v[x].size(); i++) {
5if (!col[v[x][i]]) dfs(v[x][i],3-y);
6if (col[v[x][i]]==col[x]) FLAG=true; //产⽣了冲突
7 }
8 }
9for (i=1; i<=n; i++) col[i]=0; //初始化
10for (i=1; i<=n; i++) if (!col[i]) dfs(i,1); //dfs染⾊
二分体 图论
二分体图论
1.定义
二分图,又称二部图,是图论中的一种特殊模型。设G=(V,E)是一个无向图,如果顶点V可分割为两个互不相交的子集(A,B),并且图中每条边(i,j)所关联的两个顶点i和j分别属于这两个不同的顶点集(i in A,j in B),则称图G是一个二分图。
2.判定
无向图G={V, E},如果可以把结点分成不相交的两部分,即X和Y,使得每条边的其中一个端点在X中,另一个端点在Y中,则称图G 是二分图。
二分图-无奇数图
无向图G为二分图的充分必要条件是,G至少有两个顶点,且其所有回路的长度均为偶数。
3.性质
1.最小点覆盖=最大匹配数
2.最小边覆盖=点数-最小点覆盖(最大匹配数)
3.最小路径覆盖=原图的结点数-新图的最大匹配数。
4.最大独立集=点数-最小点覆盖(最大匹配数)
4.匹配
二分图匹配:给定一个二分图G={V, E},将E的子集M称作一个匹配,如果M中的任意两条边都没有公共端点。
多重匹配:二分图中某些点可以被匹配多次。
最大匹配:包含的边数最多的匹配。
X(Y) -完全匹配:X(Y)中的所有顶点都出现在匹配M中。
完全匹配:所有的点都在匹配边上的匹配(M既是X-完全匹配,又是Y-完全匹配)。
最佳匹配:如果G为加权二分图,则权值和最大的完美匹配称为最佳匹配。
5.相关算法:
二分图最大匹配:匈牙利算法、HK算法、网络流最大流
二分图多重匹配:网络流最大流
二分图最佳匹配:KM算法、网络流最大流
算法学习:图论之二分图的最优匹配(KM算法)
二分图的最优匹配(KM算法)
KM算法用来解决最大权匹配问题:在一个二分图内,左顶点为X,右顶点为Y,现对于每组左右连接XiYj有权wij,求一种匹配使得所有wij的和最大。
基本原理
该算法是通过给每个顶点一个标号(叫做顶标)来把求最大权匹配的问题转化为求完备匹配的问题的。设顶点Xi的顶标为A[ i ],顶点Yj的顶标为B[ j ],顶点Xi与Yj之间的边权为w[i,j]。在算法执行过程中的任一时刻,对于任一条边(i,j),A[ i ]+B[j]>=w[i,j]始终成立。
KM算法的正确性基于以下定理:
若由二分图中所有满足A[ i ]+B[j]=w[i,j]的边(i,j)构成的子图(称做相等子图)有完备匹配,那么这个完备匹配就是二分图的最大权匹配。
首先解释下什么是完备匹配,所谓的完备匹配就是在二部图中,X点集中的所有点都有对应的匹配或者是
Y点集中所有的点都有对应的匹配,则称该匹配为完备匹配。
这个定理是显然的。因为对于二分图的任意一个匹配,如果它包含于相等子图,那么它的边权和等于所有顶点的顶标和;如果它有的边不包含于相等子图,那么它的边权和小于所有顶点的顶标和。所以相等子图的完备匹配一定是二分图的最大权匹配。
初始时为了使A[ i ]+B[j]>=w[i,j]恒成立,令A[ i ]为所有与顶点Xi关联的边的最大权,B[j]=0。如果当前的相等子图没有完备匹配,就按下面的方法修改顶标以使扩大相等子图,直到相等子图具有完备匹配为止。
我们求当前相等子图的完备匹配失败了,是因为对于某个X顶点,我们找不到一条从它出发的交错路。这时我们获得了一棵交错树,它的叶子结点全部是X顶点。现在我们把交错树中X顶点的顶标全都减小某个值d,Y顶点的顶标全都增加同一个值d,那么我们会发现:
离散数学图论作业7-二部图匹配
离散数学图论作业7-二部图匹配
Problem1
证明:一个无回路的简单连通图最多只有一个完美匹配。(完美匹配指能饱和所有顶点的匹配)
Problem2
从下图G=(A,B,E)中,找出相对于匹配M(粗边的集合)的任意三条交错路径(alternating path)和至少两条增广路径(augmenting path),然后利用增广路径扩大M来找到最大匹配。
a0 a1 a2 a3 a4 a5b0 b1 b2 b3 b4 b
5
Problem3
对于哪些n值来说,下列图是存在完美匹配的二部图?
a)K n
b)C n
c)Q n
对于每一个二部图G=(A,B,E),判断G是否有饱和A的匹配。如果没有,请说明理由。
(1)(2)(3)(4)
Problem5
令k为一整数。对于任意有限集合,证明对它的任意两个k划分都存在一个相同的代表集。
•集合的k划分指划分为大小相同的互不想交的k个子集,为简便起见,设集合的大小为k的整数倍从而每个子集均有相同个元素。
•一个划分的代表集指从每个子集中取出一个元素而构成的集合。
举例:集合{1,2,3,4}的一个2划分为A:{1,2}{3,4}。此划分的代表集有{1,3},{2,3},{1,4},{2,4},但{1,2}不是其代表集。集合的另外一个划分为B:{2,3}{1,4}。易见,A与B存在相同的代表集{1,3}。
Problem6
假设某校计算机系学生选导师时出现了这样的情况:对于每一位学生,至少对k名导师感兴趣;对于每一位导师,至多有k名学生对他感兴趣。假设每位导师只能指导1名学生,且每位学生也只能选择1名导师。试证明:存在这样的匹配,使得每位学生都能选到自己感兴趣的导师。
konig 定理
konig 定理
Konig定理是图论中的一个重要定理,它是由匈牙利数学家Dénes Konig在1936年首次证明的。这个定理主要应用于二分图(bipartite graph)的研究中,二分图是一种特殊的图,其中所有的顶点都可以被分成两个互不相交的子集,并且每一条边都连接这两个子集中的一个顶点。
Konig定理的表述如下:在一个二分图中,最大匹配数等于最小点覆盖数。换句话说,一个图中的最大匹配数等于覆盖该图中所有顶点所需的最小边数。
为了更好地理解这个定理,我们可以先了解一下什么是匹配和点覆盖。在图论中,一个匹配是一个边的集合,其中任意两条边都不共享一个顶点。最大匹配是指一个匹配中包含的边数最多。点覆盖是指一个顶点的集合,该集合中的任意顶点都是边的一个端点。最小点覆盖是指覆盖所有顶点所需的最小顶点数。
根据Konig定理,在二分图中,最大匹配数等于最小点覆盖数。这个定理的证明过程需要使用到一些图论中的技巧和结论,例如Kőnig-Egerváry定理和Hall定理等。
这个定理的应用非常广泛,它可以用于解决一些组合优化问题,例如最大匹配问题和最小点覆盖问题等。此外,Konig定理还可以用于证明一些其他图论中的结论,例如Kőnig-Egerváry定理和Hall定理等。
二分图匹配算法及其应用【文献综述】
二分图匹配算法及其应用【文献综述】
文献综述
数学与应用数学
二分图匹配算法及其应用
图的匹配理论简单的说就是使得图G 中每两个点之间都有联系. 匹配理论是图论中的一个重要内容, 它在运筹学、系统工程中都有着广泛的应用, 近几十年来, 随着组合数学的迅速发展, 匹配理论成为许多重要理论的基础和源泉. 二分图的最大匹配算法是匹配理论研究的热点之一. KM 算法是求最大匹配的经典算法, 它是在匈牙利算法的进一步提高, 它是解决数学中一类存在性问题的基本工具, 广泛应用于社会、经济、科技、自然等各个领域中. 本文主要研究KM 算法的具体原理, 步骤, 以及它一些实际问题中的应用.
图的匹配问题起源于1935年霍尔的“婚姻问题”. KM 算法是Kuhn 和Munkras 分别于1955年和1957年独立提出来的, 他们在研究图论中最大权匹配问题时很巧妙运用KM 算法去解决问题.
定义1 图G 有三部分所组成
(1) 非空集合)(G V , 称为G 的结点集, 其成员称为结点或顶点.
(2) 集合)(G E , 称为G 的边集, 其成员称为边.
(3) 函数
))(),(()(:G V G V G E G →ψ,
称为边和顶点的关联映射. 这里))(),((G V G V 称为)(G V 的偶对集, 其成员偶对形如),(v u , u ,v 为结点, 它们未必不同. 当),()(v u e G =ψ时, 称边e 关联端点u ,v . 当),(v u 用作序偶时
)()())(),((G V G V G V G V ?=,
基于二分图最佳匹配的图像检索方法
减 少数 据量 的 目的 . 后 将 两 幅 图像 分 别 分 成 数 然 量 和大 小相 同的若 干块 , 计 各分 块 的颜 色分 布 , 统
用直方图相交法得到示例图像与 目标图像各子块 间的相似度 , 借助带权 2分 图 的最 佳匹配 的方
法, 寻找 子 图像 间 的最 佳 比较位 置 . 而使 得检 索 从 既考 虑 了颜 色 的 空 间 分 布关 系 , 具 有 一 定 的几 又
离 与 人 的感知 距 离不 一致 . 因此 , 要 用 另一 种符 需 合 人 的视 觉心 理 的颜 色模 型来 表示 颜 色 . H V颜 色空 间采用 色度 、 和度 S和亮 度 S 饱
聚合 向量 等 , 这 些 方 法 或 是 不 能 较 好 地 刻 画颜 但
色 的空 间位 置分 布 信 息 J 或 是 丢 失 了全 局颜 色 , 直方 图所 具 有 的 旋 转 、 移 不 变 性 的优 点 j 尚 平 , 无法 做 到兼 顾 .
Jn. 2 1 a 0l
文 章 编 号 :0 72 5 (0 2 0 -0 40 10 -83 2 1 ) 10 5 -5
基 于 二分 图最 佳 匹配 的 图像 检 索 方 法
金 红 娇 罗 时光 ,
(. 1 吉林化 工学 院 信息与控制工程学 院 , 吉林 吉林 12 2 2 吉林 化工学院 理学 院 , 30 2;. 吉林 吉林 12 2 ) 3 0 2
图论之二部图图形解析
*7.5 二部图及匹配 7.5.1二部图 在许多实际问题中常用到二部图,本节先介绍二部图的基本概念和主要结论,然后介绍它的一个重要应用—匹配。
定义7.5.1 若无向图,G V E =的顶点集V 能分成两个子集1V 和2V ,满足
(1)12V V V =U ,12V V φ=I ;
(2)(,)e u v E ∀=∈,均有1u V ∈,2v V ∈。
则称G 为二部图或偶图(Bipartite Graph 或Bigraph),1V 和2V 称为互补顶点子集,常记为12,,G V V E =。如果1V 中每个顶点都与2V 中所有顶点邻接,则称G 为完全二部图或完全偶图(Complete Bipartite Graph),并记为,r s K ,其中12,r V s V ==。
由定义可知,二部图是无自回路的图。
图7-55中,(),(),(),(),()a b c d e 都是二部图,其中(),(),(),()b c d e 是完全二部图1,32,32,43,3,,,K K K K 。
图7-55二部图示例
显然,在完全二部图中,r s K 中,顶点数n r s =+,边数m rs =。 一个无向图如果能画成上面的样式,很容易判定它是二部图。有些图虽然表面上不是上面的样式,但经过改画就能成为上面的样式,仍可判定它是一个二部图,如图7-56中()a 可改画成图()b ,图()c 可改画成图()d 。可以看出,它们仍是二部图。
图7-56二部图示例
定理7.5.1 无向图,G E =为二部图的充分必要条件为G 中所有回路的长度均为偶数。
基于二分图完美匹配算法变换序列问题论文
基于二分图完美匹配算法的变换序列问题图论模型起源于“哥尼斯堡的七桥问题”,是指对一些客观事物进行抽象、化简,并用图来描述事物特征及内在联系的过程。在建立图论模型的过程中,和几何模型、运筹学模型一样,也需要用到集合、映射、函数等基本的数学概念和工具。如何建立问题的图论模型并没有通用的准则。在复杂的实际问题中,有时我们会感到难以建立适当的模型,这些都需要我们有丰富的经验,灵活的思维以及良好的创造力。
一、变换序列问题描述
对于0,1,…,n-1的n个整数,给定一个距离序列d0,d1,…,dn-1,定义一个变换序列t0,t1,…,tn-1使得每个i,ti的环上距离等于di 。一个合法的变换序列应是0,1,…,n-1的一个排列,任务是要求出字典序最小的那个变换序列。
二、图论模型建立
问题抽象成图论模型:建立一个二分图,x集合每个顶点代表0,1,…,n-1的n个整数,y集合每个顶点为对应的n个整数。x集合的第i个顶点向其环上距离为di的y集合中的两个顶点连一条边。
三、图的有关理论
二分图:设x,y都是非空有限顶点集,且x∩y = ,称g=(x,y,e)为二分图。
正则图:定义2若二分图g=(x,y,e)的每一个顶点的都与k
条边相连,则称g为k阶正则图。
匹配:图g(v,e)中若干互不相邻的边组成的集合称为图g的一个匹配。
最大匹配:给定一个二分图g(v,e),在g的一个子图m中,m 的边集中的任意两条边都不依附于同一个顶点,则称m是一个匹配。选择这样的边数最大的子集称为图的最大匹配问题。
完全匹配(或称完备匹配):如果一个匹配中,图中的每个顶点都和图中某条边相关联,则称此匹配为完全匹配,也称作完备匹配。
第五章图论(二)
deg (v) deg (v) e ,e=E。
vV
vV
证明: 由定理1的握手定理,可知入度和出度之和为
2e。对于任意一条边vivj来说,它若是vi入度边的话,也必 是vj出度边,反之亦成立,故一个图中入度和出度边数相 同,等于2e/2=e。
❖ 底无向图:把有向图看作无向图,即去掉边上的方向
Fra Baidu bibliotek
5.2.2 特殊的简单图 ❖ 完全图Kn:每对顶点间都有边 ❖ 例4 n个顶点上的完全图(表示成Kn )是在每对不同顶
证明: 用6个点v1,v2,v3,v4,v5,v6来表示六个 人,互相认识的两个人用实现相连,否则用虚线相连。这 就产生了一个任何两个顶点间必有连线的图,称为完全图。 因此,问题就归结为:在一个具有六个顶点的完全图中, 至少存在一个实线三角形或虚线三角形。
任取一个顶点vi,则vi与其他五点的连线中,至少有三条 是实线或三条是虚线。不妨设为实线,其相应的顶点为vj, vk,vl,这三个顶点形成的三角形,若是实线或虚线三角 形,则问题得解;否则,至少有一条边是实线的,不妨设 为vj vk,那么三角形vjvivk便是实线三角形了。
图H不是偶图,因为它的顶点集合不能分成两个子集, 使得边都不连接同一个子集的两个顶点。(读者应当通过 考虑顶点a, b, f 验证它。)
❖ 完全偶图Km,n:两个子集之间的每对顶点之间都有边 ❖ 例12 LAN的几种拓扑结构
二分图匹配匈牙利算法和KM算法简介
1
23
4
1
87 6 5
2
3
4
这是NP问题!
8 5
7
6
例题1 Place the Robots(ZOJ)
模型二
我们将每一行,每一列被墙隔开, 且包含空地的连续区域称作 “块”。显然,在一个块之中, 最多只能放一个机器人。我们把 这些块编上号。
1
2
3
4
5Leabharlann Baidu
同样,把竖直方向的块也编上号。
1 2
3 4
例题1 Place the Robots(ZOJ)
例题3 打猎
❖ 猎人要在n*n的格子里打鸟,他可以在某一行 中打一枪,这样此行中的所有鸟都被打掉, 也可以在某一列中打,这样此列中的所有鸟 都打掉。问至少打几枪,才能打光所有的鸟?
❖ 建图:二分图的X部为每一行,Y部为每一列, 如果(i,j)有一只鸟,那么连接X部的i与Y部的j。
❖ 该二分图的最大匹配数则是最少要打的枪数。
例题2 救护伤员(TOJ1148)
❖ 无情的海啸夺取了无数人的生命.很多的医疗 队被派往灾区拯救伤员.就在此时,医疗队突 然发现自己带的药品已经不够用了,只剩下了 N种。(1 < n <= 20),随着病人病情的发 展,每种药在每天能获得的效果是不一样的。 同时,每天病人只能服用一种药。也就是说, 这些药还够支持N天。现在,给出你每种药 在每天使用的效果,请你判断当每种药都用 完后所有药达到的效果之和最大可以是多少。
图论第四章(2)
3)色数多项式
给定图G,如果最多使用t 种颜色对它的结点进行着色, 满足相邻结点着以不同颜色,其着色的不同方案数用f(G,t) 表示。称f(G,t)为G的色数多项式。
• 显然,当t < (G) 时f(G,t)=0;满足f(G,t)>0的最少颜色
数t= (G). • 对平面图G: 五色定理断言 f(G,5)>0, 四色定理断言 f(G,4)>0。
例 求n个结wenku.baidu.com的回路Cn的色数多项式。 解: Cn可看成是下面的树Tn添加一边得到的:
Tn
i j
Cn
Cn-1 vij
于是f(Tn,t) = f(Cn,t)+f(Cn-1,t),从而有递推式 f(Cn,t) = -f(Cn-1,t)+ t(t-1)n-1 , 由此可得 f(Cn,t) = (t-1)n-1 + (-1)n-1 (t-1).
ij
因此,命题中等式成立。
•应用此递推式,将G逐级分解,最后得到可立即确定 其色数多项式的若干图(常为大小不一的若干完全图), 其和即为G的色数多项式。
例 试确定下图的色数多项式。
根据前面的例题的分解,此图可分解为1个 K5,2个K4和1个K3(察看),故 f(G,t) = f(K5,t)+2f(K4,t)+ f(K3,t) = t(t-1)(t-2)(t-3)(t-4)+2 t(t-1)(t-2)(t-3) + t(t-1)(t-2) = t(t-1)(t-2)(t2-5t+7).
图论——染色法判定二分图
图论——染⾊法判定⼆分图
⾸先明确概念:
⼆分图:设G=(V,E)是⼀个⽆向图,如果顶点V可分割为两个互不相交的⼦集(A,B),并且图中的每条边(i,j)所关联的两个顶点i和j分别属于这两个不同的顶点集(i in A,j in B),则称图G为⼀个⼆分图。
奇数环:⼀个图中边数为奇数的环。
染⾊法原理:
⾸先任意取出⼀个顶点进⾏染⾊,和该节点相邻的点有三种情况:
1.如果未染⾊,那么继续染⾊此节点(染为另⼀种颜⾊)
2.如果已染⾊但和当前节点颜⾊不同,则跳过该点
3.如果已染⾊并且和当前节点颜⾊相同,返回失败(该图不是⼆分图)
明确⼆分图、奇数环、染⾊法之间的关系:
如果⼀个图中存在奇数环,那么这个图⼀定不是⼆分图;这⼀点显然成⽴。
如果⼀个图中不存在奇数环,那么这个图⼀定是⼆分图:
证明:⽤染⾊法。从某个点开始逐层交叉染⾊,在染⾊过程中:
若发现有某条边的两个端点着⾊相同,则必定存在奇数环①,与题意相⽭盾。
若没有发现,则根据染⾊法原理,每⼀条边的两端着⾊必然不同,那么根据⼆分图的定义,就可知这个图是⼀个⼆分图。
①的证明:
不妨设这条边的两个端点着⾊都为1,且这两点必然是由同⼀个源点扩展⽽来。那么根据染⾊法原理,因为这两个点的着⾊相同,那么从源点到这两个点所经过的边数(假设分别为x和y)的奇偶性必然相同,那么这个环的总边数为x+y+1,由数学知识得这个数必然是奇数。
证毕!
模板题链接:
代码如下:
#include <iostream>
#include <algorithm>
算法合集之《浅析二分图匹配在信息学竞赛中的应用》
浅析二分图匹配在信息学竞赛中的应用
湖南省长沙市长郡中学王
俊
[摘要]
本文通过对几道信息学竞赛题目的分析,举例说明了二分图匹配在信息学竞赛中的应用。二分图匹配的应用一般是通过分析某些最优化问题的性质,构造出二分图,再通过求得该二分图的最大匹配,最佳匹配等各种形式的匹配从而解决原问题。
[关键字]
匹配二分图最小权最大权优化
[正文]
一引言
二分图匹配是信息学竞赛中一类经典的图论算法,在近年来信息学竞赛中有广泛应用。如果可以以某一种方式将题目中的对象分成两个互补的集合,而需要求得它们之间满足某种条件的一一对应的关系时,往往可以抽象出对象以及对象之间的关系构造二分图,然后利用匹配算法来解决。这类题目通常需要考察选手对原题进行建模,构造二分图,设计匹配算法,并对其算法进行适当优化等多方面能力。下面就通过两道例题来说明二分图匹配在信息学竞赛中的一些应用。
二Railway Communication1
2.1 问题描述
某国有n个城镇,m条单向铁路。每条铁路都连接着两个不同的城镇,且该铁路系统中不存在环。现需要确定一些列车运行线,使其满足:
I)每条铁路最多属于一条列车运行线;
II)每个城镇最多被一条列车运行线通过(通过包括作为起点或终点);
III)每个城镇至少被一条列车运行线通过;
IV)列车运行线的数量应尽量小。
V)在满足以上条件下列车运行线的长度和应该尽量小。
1Saratov State University 252. Railway Communication
2.2 问题分析
题目要求列车运行线数最少,又要求在此条件下列车运行线的长度和最小,不便于一起考虑,我们不妨分步研究,先考虑列车运行线数最少的子问题。则该子问题可建立如下数学模型:给定一个有向无环图G 0=(N 0,A 0),用尽量少的不相交的简单路径覆盖N 0。
信息学奥数NOIP图论 · Graph Theory专题
4
Graph Theory
目录图页论
最短路
Floyd算法
• 动态规划以”途径点集大小”为阶段?
– 以长度为阶段效率不高,是因为没有充分利用阶段与决策之间的关系 – 决策需要枚举中转点,不妨考虑也以中转点集为阶段
• F[k,i,j]表示”可以经过标号≤k的点中转时”从i到j的最短路 • F[0,i,j]=A[i,j],A为前面定义的邻接矩阵 • F[k,i,j]=Min{F[k-1,i,k]+F[k-1,k,j]},O(N^3) • k这一维空间可以省略,变成D[i,j] • 就成为了我们平时常见的Floyd算法
• 利用并查集,起初每个点各自构成一个集合 • 所有边按照边权从小到大排序,依次扫描 • 若当前扫描到的边连接两个不同的点集,合并 • 本质也是贪心,O(MlogN) • 与Prim算法相比,没有基准点,该算法是不断选择两个距离最
近的集合进行合并的过程
21
Graph Theory
目录图页论
生成树
TYVJ1659
目录图页论
最短路
欧拉回路(POJ2230)
• 欧拉回路:经过每条边恰好一次的回路(一笔画问题) • 欧拉回路存在 连通图中每个点的度数都是偶数。
• 初始时,1号点入栈。 • 依次把与栈顶节点有未标记的边相连的节点入栈并递归,递归前标记该边。 • 如果当前栈顶结点出发已经没有未标记边,把该节点出栈,并记录到答案序
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
图论专题二分图
朝花夕拾2010-12-28 17:56:46 阅读66 评论0 字号:大中小订阅
二分图:二分图是这样一个图,它的顶点可以分类两个集合X和Y,所有的边关联的两个顶点恰好一个属于集合X,另一个属于集合Y。
二分图匹配:给定一个二分图G,在G的一个子图M中,M的边集中的任意两条边都不依附于同一个顶点,则称M是一个匹配。
最大匹配:图中包含边数最多的匹配称为图的最大匹配。
完美匹配:如果所有点都在匹配边上,则称这个最大匹配是完美匹配。
二分图匹配基本概念:
未盖点
设VI是G的一个顶点,如果VI不与任意一条属于匹配M的边相关联,就称VI是一个未盖点。
交错轨
设P是图G的一条轨,如果P的任意两条相邻的边一定是一条属于M而另一条不属于M,就称P是交错轨。
可增广轨(增广路)
两个端点都是未盖点的交错轨称为可增广轨。
可增广轨的性质:
1:P的路径长度必定为奇数,第一条边和最后一条边都不属于M。
2:P经过取反操作可以得到一个更大的匹配M’。
3:M为G的最大匹配当且仅当不存在相对于M的增广路径。
二分图最大匹配匈牙利算法:
算法的思路是不停的找增广轨,并增加匹配的个数,增广轨顾名思义是指一条可以使匹配数变多的路径,在匹配问题中,增广轨的表现形式是一条"交错轨",也就是说这条由图的边组成的路径,它的第一条边是目前还没有参与匹配的,第二条边参与了匹配,第三条边没有..最后一条边没有参与匹配,并且始点和终点还没有被选择过.这样交错进行,显然他有奇数条边.那么对于这样一条路径,我们可以将第一条边改为已匹配,第二条边改为未匹配...以此类推.也就是将所有的边进行"取反",容易发现这样修改以后,匹配仍然是合法的,但是匹配数增加了一对.另外,单独的一条连接两个未匹配点的边显然也是交错轨.可以证明,当不能再找到增广轨时,就得到了一个最大匹配.这也就是匈牙利算法的思路。
代码:
//匈牙利算法复杂度o(nm)
#include
using namespace std;
const int MAXN = 1001,MAXM = 1001;
int n1,n2,m,ans;//n1,n2分别为二分图两边节点的个数,两边的节点分别用1..n1,1..n2编号,m为边数
bool g[MAXN][MAXM];//图G邻接矩阵g[x][y]
bool y[MAXM];//Y集合中点i访问标记
int link[MAXM];//link[y]表示当前与y节点相邻的x节点
void init()
{
int x,y;
memset(g,0,sizeof(g));
memset(link,-1,sizeof(link));
ans = 0;
scanf("%d%d%d",&n1,&n2,&m);
for (int i = 1;i <= m;i++)
{
scanf("%d%d",&x,&y);
g[x][y] = true;
}
}
bool find(int x)//是否存在X集合中节点x开始的增广路
{
for (int i = 1;i <= n2;i++)
if (g[x][i] && !y[i])//如果节点i与x相邻并且未访问过
{
y[i] = true;
if (link[i] == -1 || find(link[i]))//如果找到一个未盖点i中或从与i相邻的节点出发有增广路
{
link[i] = x;
return true;
}
}
return false;
}
int main()
{
init();
/*for (int j = 1;j <= n2;j++)
for (int i = 1;i <= n1;i++)
if (g[i][j] && !link[j])
link[j] = i;//贪心初始解优化*/
for (int i = 1;i <= n1;i++)
{
memset(y,0,sizeof(y));
if (find(i))
ans++;
}
printf("%d\n",ans);
return0;
}
真正求二分图的最大匹配的题目很少,往往做一些简单的变化:
变种1:二分图的最小顶点覆盖
最小顶点覆盖要求用最少的点(X或Y中都行),让每条边都至少和其中一个点关联。knoig定理:二分图的最小顶点覆盖数= 二分图的最大匹配数(m)。
变种2:DAG图的最小路径覆盖
用尽量少的不相交简单路径覆盖有向无环图(DAG)G的所有顶点,这就是DAG图的最小路径覆盖问题。
结论:DAG图的最小路径覆盖数= 节点数(n)- 最大匹配数(m)
变种3:二分图的最大独立集
结论:二分图的最大独立集数 = 节点数(n)—最大匹配数(m)
附上一些题目
1:pku 1466 Girls and Boys /problem?id=1466
这是一道典型的二分匹配的题目,并且非常简单,使用模板即可AC。
题目大意:在N个点的图G中选出m个点,使这m个点两两之间没有边.求m最大值.如果图G满足二分图条件,则可以用二分图匹配来做.最大独立集点数= N - 最大匹配数。最大独立数=未匹配的节点+匹配数/2 (1)(设n=匹配数/2,可以理解为去掉二分图某侧匹配好的n个节点,在另一侧对应的n个节点就没有相匹配的了)
未匹配的节点=顶点数-匹配数(2)