算法合集之《浅析二分图匹配在信息学竞赛中的应用》
浅析二分图匹配在信息学竞赛中的应用
浅析二分图匹配在信息学竞赛中的应用[摘要]本文通过对几道信息学竞赛题目的分析,举例说明了二分图匹配在信息学竞赛中的应用。
二分图匹配的应用一般是通过分析某些最优化问题的性质,构造出二分图,再通过求得该二分图的最大匹配,最佳匹配等各种形式的匹配从而解决原问题。
[关键字]匹配二分图最小权最大权优化[正文]一引言二分图匹配是信息学竞赛中一类经典的图论算法,在近年来信息学竞赛中有广泛应用。
如果可以以某一种方式将题目中的对象分成两个互补的集合,而需要求得它们之间满足某种条件的一一对应的关系时,往往可以抽象出对象以及对象之间的关系构造二分图,然后利用匹配算法来解决。
这类题目通常需要考察选手对原题进行建模,构造二分图,设计匹配算法,并对其算法进行适当优化等多方面能力。
下面就通过两道例题来说明二分图匹配在信息学竞赛中的一些应用。
二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、自己的饭量自己知道。——苏联
算法学习:图论之二分图的最优匹配(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,那么我们会发现:1)两端都在交错树中的边(i,j),A[ i ]+B[j]的值没有变化。
也就是说,它原来属于相等子图,现在仍属于相等子图。
2)两端都不在交错树中的边(i,j),A[ i ]和B[j]都没有变化。
二分图的算法及其应用
最大匹配与最小覆盖的关系
在证明这个定理的过程中,要用到 婚姻定理: 在证明这个定理的过程中,要用到Hall婚姻定理: 婚姻定理
设G是一个偶图,顶集划分成V1和V2,G中存在 对于V1的完备匹配的充要条件是,对于一切S V1, 都有 S ≤ P ( S ) .
1931年 给出最大匹配与最小覆盖的关系定理如下: 1931年Knig给出最大匹配与最小覆盖的关系定理如下: 给出最大匹配与最小覆盖的关系定理如下
匹配(3) 匹配
定义3: 定义 : 为偶图G=( 令M为偶图 =( ,△,Y)中的一个匹配,令N 为偶图 =(X, )中的一个匹配, 的补集, 的不属于M的边集合 是M的补集,即G的不属于 的边集合,M∪N= 的补集 的不属于 的边集合, ∪ = 是顶点, 一个是左顶点( △.令u和v是顶点,且u和v一个是左顶点(即属 和 是顶点 和 一个是左顶点 ),一个是右顶点 ),若连接 于X),一个是右顶点(即属于 ),若连接 和v ),一个是右顶点(即属于Y),若连接u和 的链满足下列性质: 的链满足下列性质: 的第一, 边属于N (1)r的第一,三,五,… 边属于 ; ) 的第一 的第二, 边属于M; (2)r的第二,四,六,… 边属于 ; ) 的第二 都不与M的边相连 (3)u和v都不与 的边相连. ) 和 都不与 的边相连. 那么称r为关于匹配 的交错链,简称M-交错链. 那么称 为关于匹配M的交错链,简称 交错链. 为关于匹配 的交错链 交错链
结论
引理: 引理 如果G是一个偶图 那么ρ(G)≤c(G),即偶图 是一个偶图, 即偶图G 如果 是一个偶图,那么 ≤ ( ) 即偶图 的最大匹配边数不会超过G的覆盖数 的覆盖数. 的最大匹配边数不会超过 的覆盖数. 一般图的最小覆盖问题是一个已被证明的NPC问 一般图的最小覆盖问题是一个已被证明的 问 换一句话说,一般图的最小覆盖问题, 题.换一句话说,一般图的最小覆盖问题,是没有 有效算法的图论模型.所以, 有效算法的图论模型.所以,将一个实际问题抽象 成最小覆盖问题,是没有任何意义和价值的. 成最小覆盖问题,是没有任何意义和价值的. 但是,如果问题可以抽象成偶图的最小覆盖问题, 但是,如果问题可以抽象成偶图的最小覆盖问题, 结局就不一样了.由于偶图的特殊性, 结局就不一样了.由于偶图的特殊性,偶图的最小 覆盖问题存在多项式算法. 覆盖问题存在多项式算法.
算法合集之《浅析二分图匹配在信息学竞赛中的应用》
4> 更新R以及Path;
O(n3)
复杂度分析
前三个操作复杂度都显而易见,下面讨论 操作4的时间复杂度。
j2
如果某个点为可匹配点,
则它的路径必然为
i2
i0→j1→i1→j2→i2 →… →jk →ik (k≥0),其中i0为未匹配点而且
i1
jk
(jt, it)(t ∈[1,k]) 为匹配边。
长郡中学 王俊
引言
二分图匹配是一类经典的图论算法, 在近年来信息学竞赛中有广泛的应用。
二分图和匹配的基础知识已经在前辈 的集训队论文中有过介绍,本文主要通过 一道例题研究其应用。
[例题] Roads
给定一个无向图G0=(V0,E0,C),V0为顶点 集合,E0为边集合(无重边),C为边权(非负整数) 。设n= |V0|,m= |E0|,E0中前n-1条边构成一棵生成树 T。请将边权进行如下修改,即对于e∈E,把Ce修改 成De(De也为非负整数),使得树T成为图G的一棵最 小生成树。修改的代价定义为:
j← 1 q ← Y'的第j个结点
Y
N
存在q的某个邻结点p为可匹配点
更新M',R和Path
j←j+1
Y
结束
N j>m
复杂度分析
下面来分析一下该算法的时间复杂度。
算法中执行了如下操作:
1> 将所有Y'结点按权值大小非降序排列; O(mlog2m)=O(n2log2n)
2> 询问是否存在q的某个邻结点p为可匹配点; O(mn)=O(n3)
X'
Y'
1
1
2
2
算法合集之《浅谈信息学竞赛中的线性规划——简洁高效的单纯形法实现与应用》
算法合集之《浅谈信息学竞赛中的线性规划——简洁高效的单纯形法实现与应用》线性规划的简单应用和实现浙江省杭州二中李宇骞摘要线性规划在实际生活中应用非常广泛,已经创造了无数的财富。
但是它在竞赛中的应用很少。
然而,我相信它的潜力很大,所以在这里向大家简单地介绍了线性规划的一些应用,以及如何实现解线性规划,以抛砖引玉,希望线性规划能够在竞赛中如同网络流一样熠熠生辉。
本文主要分三部分,第一部分简单地介绍了线性规划,给出了其定义;第二部分给出了一些简单的应用,以及一个线性规划的经典应用——多物网络流;第三部分是用单纯形(Simplex)算法实现解线性规划。
由于对大多数竞赛选手而言,写一个线性规划的程序比构造一个模型更为恐怖(虽然难度可能不及),并且单纯形法不是多项式级别的,不实践很难知道它的速度到底怎么样,所以本文着重于第三部分,较详细地描述了一些实现的细节,以及简单的证明,并且对单纯形法的运行速度做了一些实验,还与专业的数学软件MATLAB和LINDO做了对比,从一定程度上说明了单纯形法的速度是卓越的。
同时,200行左右的程序可以让大家不必那么担心编程的复杂度,某些情况下,100行左右的程序就足够了。
关键字线性规划(Linear programming)单纯形法(Simplex)多物网络流(Multicommodity flow)引言“随著强有力的算法的发展与应用,线性规划能解决的问题也越来越来多。
在历史上,没有哪种数学方法可以像线性规划那样,直接为人类创造如此巨额的财富,并对历史的进程发生如此直接的影响。
”孙捷,这位曾经执教于清华大学的美国华盛顿大学博士如此评价线性规划。
他还举了这样一个实例:在波斯湾战争期间,美国军方利用线性规划,有效地解决了部队给养和武器调运问题,对促进战争的胜利,起了关键的作用。
难怪人们说,因为使用炸药,第一次世界大战可说是「化学的战争」;因为使用原子弹,第二次世界大战可说是「物理的战争」;因为使用线性规划,波斯湾战争可称为「数学的战争」。
二分答案法的应用.doc
二分上界(或答案)法的应用前言:在当今的信息学竞赛中,很多题目都令人无从下手,但如果我们先假定出题目的答案,问题就立刻迎刃而解。
下面我们从几道例题谈谈二分答案法的应用。
例题一:草莓(noi2003)题意简述:定义:S"皿表示第/块草莓田中所有草莓重量的和(1< 1< k) Ox = min {sug |1 < j “}你的任务就是要把一片草莓田分割成k块,且分割方案需要满足如下的条件:1•每一块中的草莓必然是通过触须直接或者间接和其他草莓相连接的;2.这种分割方案所对应的x尽可能的大。
最后输出你的分割方案和结果。
算法分析:这是一道结果提交类问题,其中有6个数据都是树,现在我们对树的问题进行讨论。
初一看,这题很难找到有效的模型,关键在于有的时候切出sum很大的一块反而不好,因为题目中需要的是相对平均,因此,纯粹的贪心很难成立。
我们试着稍微改变一下题目,假设题目要求求一种答案不小于x的方法,我们该如何处理呢?很快我们有了头绪,首先通过宽度搜索建树,然后从叶子结点开始向上处理,如果有以某个结点为根的子树的权值和超过了x,我们就将该结点以及它所在的子树作为一个连通块,从图中删去。
这样的做法一定是正确的,因为sum—旦超过了x,如果把更多的结点给这个连通块显然是没有必要的。
一直进行这样的处理,如果割出了k个连通块以上,则问题有解,否则问题无解。
因为只要扫描一遍,因此这个问题的时间复杂度为O(N)o既然我们已经可以在0(N)的时间类解决上述子问题,那么能比较高效地求解原题呢?我们可以枚举每一个x再加以判断,这样复杂度较高。
比较好的方法是采用二分法,假如一个解在某个去间[a, b],首先我们判断(a+b)/2是否可行,如果可行,则枚举[(a+b)/2+l,b],否则枚举[a,(a+b)/2-l]o那么,只需判断logm 次即可(其中m为所有点的权值和)。
如果不知道x,可不可以用上面的方法呢?答案是否定的,因为你不知道剩下部分的情况,所以无法在恰当的时候做出正确的选择。
算法合集之《最小割模型在信息学竞赛中的应用》
minimum cut model; 2. the maximum weight closure of a graph; 3. the maximum density sub graph; 4. the minimum weight vertex covering set and the maximum weight vertex independent set in the bipartite graph. It shows and analyzes the construction methods and thinking modes of the minimum cut model. Finally, it summarizes the methods and skills in the applications of the minimum cut model.
第 1 页 共 45 页
[][Library]Thesis
最小割模型在信息学竞赛中的应用
Amber
[摘要] 本文对最小割模型的定义和性质,以及其相关扩展知识进行了研究。其中着重对最小割
模型在以下四个方面的应用展开研究:1. 基于定义的直接应用;2. 最大权闭合图;3. 最大密 度子图;4. 二分图的最小点权覆盖集和最大点权独立集。展现与剖析了最小割模型应用的巧 妙构图方法和独特思维方式,并对这一类应用的通用方法与技巧给予总结。
[][Library]Thesis
最小割模型在信息学竞赛中的应用
算法合集之《浅谈数位类统计问题》
题目大意: 求给定区间[X,Y]中满足下列条件的整数个数:这个数恰好等于 K 个互不相等的 B 的整
数次幂之和。例如,设 X=15,Y=20,K=2,B=2,则有且仅有下列三个数满足题意: 17 = 24+20, 18 = 24+21, 20 = 24+22。
第 4 页,共 12 页
浅谈数位类问题
刘聪
【例题 4】Tickets (sgu 390)
题目大意: 有一位售票员给乘客售票。对于每位乘客,他会卖出多张连续的票,直到已卖出的票的
编号的数位之和不小于给定的正数 k。然后他会按照相同的规则给下一位乘客售票。初始时, 售票员持有的票的编号是从 L 到 R 的连续整数。请你求出,售票员可以售票给多少位乘客。
剩下的问题就是,如何统计一棵高度为 i 的完全二叉树内二进制表示中恰好含有 j 个 1 的数的个数。这很容易用递推求出:设 f[i,j]表示所求,则分别统计左右子树内符合条件数的 个数,有 f[i,j]=f[i-1,j]+f[i-1,j-1]。
这样,我们就得出了询问的算法:首先预处理 f,然后对于输入 n,我们在假想的完全 二叉树中,从根走到 n 所在的叶子,每次向右转时统计左子树内数的个数。下面是 C++代码: void init()//预处理f {
【例题 3】Sequence (spoj 2319)
题目大意: 给定所有 K 位二进制数:0,1,…,2K-1。你需要将它们分成恰好 M 组,每组都是原序列
中连续的一些数。设 Si(1 ≤ i ≤ M)表示第 i 组中所有数的二进制表示中 1 的个数,S 等于所有 Si 中的最大值。你的任务是令 S 最小。
- 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'