
图论—二分匹配
文章平均质量分 72
Ezereal
这个作者很懒,什么都没留下…
展开
-
Hdu 1179(匈牙利算法)
题意为:有n个人要去买魔杖,有m根魔杖(和哈利波特去买魔杖的时候一样,是由魔杖选人)。接下来是m行,每行第一个数k是第i根魔杖可以选的人数,接着k个数表示这根魔杖选的人的编号。最后问老板最多能卖出多少根魔杖。 #include #include #include #include #include #include #include #include #include原创 2015-12-12 14:23:22 · 446 阅读 · 0 评论 -
ZOJ 3933 Team Formation (km算法)
题意:两个队伍,有一些边相连,问最大组对数以及最多女生数量 分析:可以转化成最大权匹配问题,男男权为2,男女为3,女女为4,直接调用km算法,不过要注意km算法恒要求nx #include #include #include #include #include #include #include #include #include #include #include #i原创 2016-04-18 15:43:06 · 545 阅读 · 0 评论 -
hdu 1281 棋盘游戏
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1281 思路:把棋盘的行x看成二分图左边的点,列y看成二分图右边的点,那么就把可以放车的位置看成是一条边,而二分图的最大匹配中x互不相同,y互不相同,所以每个匹配都是不同行不同列,所以最大匹配就是最多可以放的车的数量。而要判断有多少个点是必须放的,只要在得出最大匹配后,每次去掉一个匹配,再去运算看原创 2016-02-26 17:29:43 · 377 阅读 · 0 评论 -
hdu 3829 Cat VS Dog(最大独立集)
题目描述:动物园有N只猫,M只狗,P个小孩。每个小孩都有自己喜欢的动物和讨厌的动物,如果他喜欢狗,那么就讨厌猫, 如果他讨厌猫,那么他就喜欢狗。某个小孩能开心,当且仅当他喜欢的动物留在动物园和讨厌的动物不在动物园里面。 现让管理员通过带走某些动物,问最多能使多少个孩子开心。 解题思路:题目有一个关键点,孩子喜欢猫,必然不喜欢狗,反之。 即猫和猫之间,狗和狗之间一定不存在矛盾关系,符合二分图的原创 2016-02-26 17:17:17 · 512 阅读 · 0 评论 -
poj 2594 Treasure Exploration(可重点最小路径覆盖)(二分匹配+Floyd求传递闭包)
题意:不是赤裸裸的最小路径覆盖(走遍所有的点),正常的最小路径覆盖中两个人走的路径不能有重复的点,而本题可以重复。 分析:我们仍可将问题转化为最小路径覆盖。如果一个人需要经过另一个人走过的点的时候,让他直接从该点上空飞过去,越过该点,直接走下一个点。如果我们赋予每个人这种能力,那么求得的无重复点的最小路径覆盖结果,就是题目要求的结果,因为需要重复的地方只要飞过去,就可以不重复了。赋予这个能力原创 2016-02-26 17:10:09 · 457 阅读 · 0 评论 -
hdu 2819 Swap
题目大意很明确,交换图的某些行或者是某些列(可以都换),使得这个N*N的图对角线上全部都是1. 这里有一点需要说明,就是说题目的交换,其实是将原来图的某一行移到最后图的某一行,而不是指先交换两行,得到一个新图,再交换新图的两行。感觉这里比较坑。 这里先说明的一点就是,如果通过交换某些行没有办法的到解的话,那么只交换列 或者 既交换行又交换列 那也没办法得到解。原创 2016-02-26 16:47:38 · 285 阅读 · 0 评论 -
hdu 2444 The Accomodation of Students( 判断二分图+最大匹配)
判断一个图是不是二分图,是的话求二分匹配最大匹配数。 主要是怎么判断一个图是不是二分图。不妨选取某个点作为起点并染为某种颜色、同时把与它相邻的元素染为对立的颜色,进行BFS,如果到那步发现当前点和相邻点的颜色一样,那么就出现了矛盾,就不是二#include #include #include #include #include #include #include #incl原创 2016-02-26 16:29:21 · 338 阅读 · 0 评论 -
hdu 1507 Uncle Tom's Inherited Land(行列匹配)
题意:N*M的矩形,向其中填充1*2的小块矩形,黑色的部分不能填充,问最多可以填充多少块。 题解:黑白棋最大匹配 将棋盘中i+j为奇数的做A集合,偶数的做B集合,相邻的则建立联系。于是便转换成寻找最大匹配的问题 #include #include #include #include #include #include #include #include #include原创 2016-03-22 16:11:15 · 348 阅读 · 0 评论 -
hdu 1498 50 years, 50 colors(最小覆盖点数)
题意: 给你一个n*n的矩阵,在矩阵中分布着s种颜色的气球,给你k次扎破气球 的操作,每次操作可以扎破一行,或一列的同一颜色的气球。问在k次操 作后有那几种颜色的气球是不能被完全扎破的. 解题: 利用二分图匹配,寻找每一种颜色对应的最大匹配(行和列分别为X集合,Y集合;map[i,j]代表一个搭配), 如果大于k则输出"-1",否则输出颜色的递增序原创 2016-03-22 09:46:22 · 353 阅读 · 0 评论 -
POJ 2226 Muddy Fields (最小点覆盖)
题意:一个row*col的矩阵表示一块田地,'*'表示湿地,'.'表示草地。现在FJ要在田地上铺木板盖掉所有的湿地,露出所有的草地。每块木板的宽度为1,长度为任意长。问FJ最少用几块木板就可以完成任务? 思路:匈牙利算法的最小点覆盖。将每行所含有的每一段做为一侧的点,将每列所含有的每一段作为另一侧的点,就是对每一段'*'赋给一个新的x,y坐标,使得不同的段x,y不同。 #i原创 2016-03-19 18:26:24 · 317 阅读 · 0 评论 -
二分匹配
变种1:二分图的最小顶点覆盖 在二分图中求最少的点,让每条边都至少和其中的一个点关联,这就是“二分图的最小顶点覆盖”。 二分图的最小顶点覆盖数 = 二分图的最大匹配数 变种2:DAG图(无回路有向图)的最小路径覆盖 用尽量少的不相交简单路径覆盖有向无环图(DAG)的所有顶点,这就是DAG图的最小路径覆盖问题。 DAG图的最小路径覆盖数 = 节点数(n)- 最大匹配数(m) 关键原创 2016-07-28 09:19:13 · 286 阅读 · 0 评论