
二分图
ITCharge
高效率编程,慢节奏生活。
展开
-
POJ2239 Selecting Courses【二分图最大匹配】
题目大意:学校总共有N门课程,并且学校规定每天上12节可,一周上7天。给你每门课每周上的次数,和哪一天哪一节课上的。如果有多门课程在同一天同一节课上,那么你只能选择其中一门。那么问题来了:最多能同时选多少门课而不发生冲突呢。输入说明:先给你一个N,表示有N门课。接下来N行,每行第一个数字x,表示这门课每周上几节。接下来是x对数。第一个数D表示是这一周哪一天上的,第二个数C表示是这一天哪一节课上的。思路:将这道题来看做二分图匹配问题。建立一个二分图,一边代表课程,一边代表某一节课(将一周7原创 2015-03-17 08:40:14 · 812 阅读 · 0 评论 -
POJ1466 Girls and Boys【二分图最大独立集】
题目大意:有N个学生,他们之间的某些人比较暧昧,只有认识的人能组成一个集合。问:最多能组成多少个集合,使得这几个集合之间的学生都没有任何关系。思路:从N个图中选出M个点,使得这M个点两两之间没有边,求最大的M是多少。二分图最大独立集问题。本来应该以男生、女生各一边建二分图求最大独立集,但是这里只有N个点,没有告诉男生、女生的编号。那么以N个学生为一边、再以N个学生为另一边。将相互联系的人之间建边。然后求最大匹配数。因为如果u和v有联系的话,边(u,v)和(v,u)都加入了二分图中,被重复计原创 2015-04-01 22:35:26 · 767 阅读 · 0 评论 -
POJ2060 Taxi Cab Scheme【二分图最小路径覆盖】
题目大意:出租车公司每天有有N项预约,每项预约有开始时间(xx:xx),出发地点(a,b)与目的地点(c,d)。完成这项预约行驶需要的时间是|a-c| + |b-d|分钟。一辆车可以在完成一个预约i后再去完成另一个预约j。条件就是需要再预约j开始时间的前1分钟达到出发地点。问:最少需要多少辆车能完成所有的预约。思路:二分图最小路径覆盖问题。根据题意,我们可以建立一个二分图,两边分别为N项预约。对于两个预约i和j,如果能在完成预约i后有时间赶去完成预约j,就建立一条i指向j的边。因为开始时间有原创 2015-04-03 23:58:25 · 772 阅读 · 0 评论 -
POJ1422 Air Raid【二分图最小路径覆盖】
题目大意:有N个地点和M条有向街道,现在要在点上放一些伞兵,伞兵可以沿着有向街道走,直到不能走为止。每条边只能被一个伞兵走一次。问:至少放多少伞兵,能使伞兵可以走到图上所有的点。思路:很明显的最小路径覆盖问题。先转换为二分图,先将N个点每个点拆成两个点,左边是1~N个点,右边也是1~N个点。将有向街道变为左边点指向右边点的边。因为二分图最小路径覆盖 = 点数 - 二分图最大匹配数,则求出结果就是放的最少伞兵数。原创 2015-04-04 11:03:46 · 797 阅读 · 0 评论 -
POJ2594 Treasure Exploration【二分图最小路径覆盖】【Floyd】
题目大意:给你N个地点,M条有向边,已知构成的图是有向无环图。现在要在地点上放机器人通过M条边来遍历N个地点,问:最少需要多少个机器人可以遍历N个地点。思路:这是一道求最小路径覆盖的题目。和一般最小路径覆盖的题目不一样的地方是:这里的点可以重复遍历。也就是可以有两个及以上的机器人经过同一个点。 那么,先建立一个二分图,两边都为N个地点。然后在原图的基础上,用Floyd求一次传递闭包,也就是如果点i可以到达点j,而点j可以到达点k,那么可以当做点i可以直接跳过点j而到达点k,就可以建立一条有向原创 2015-04-07 19:36:33 · 872 阅读 · 0 评论 -
POJ1548 Robots【二分图最小路径覆盖】
题目大意:在一个N*M(N <= 24,M <= 24)的图中,有很多垃圾, 清理垃圾的机器人从左上角开始清理。已知机器人只能向右或是向下清理垃圾,在清理完一个地方的垃圾后可以继续向右或是向下去清理其他垃圾。最终运行到(N,M)的位置终止。问:最少需要多少个机器人,能清理完所有的垃圾。思路:图中没有给N和M的大小,只是给出了垃圾的位置。输入用0 0表示一组数据输入结束。建一个结构体来存储垃圾的坐标值。现在来建一个二分图,图的两边就是垃圾的节点,遍历原图,如果垃圾j在垃圾i的右下角,就将(i,原创 2015-04-07 20:28:11 · 805 阅读 · 0 评论 -
POJ2446 Chessboard【二分图最大匹配】
题目大意:给一个N*M的矩阵,其中有K个地方有坑。告诉你这K个坑的位置,现在要用1*2的矩形板去覆盖矩阵,不能覆盖有坑的地方。问:是否能把除了坑之外的地方全部覆盖掉,如果能,则输出"YES",否则输出"NO"。思路:考虑到矩形板的规格是1*2,则相邻位置的(i,j)和(x,y)必然是(i+j)为奇数的话,(x+y)则为偶数。(i+j)为偶数的话,(x+j)则为奇数。这样,就可以把图上的所有点分为横纵坐标相加为奇数的点和横纵坐标相加为偶数的点。然后建立一个二分图,一边为奇数点,另一边为偶数点。原创 2015-04-08 08:17:48 · 977 阅读 · 0 评论 -
POJ3216 Repairing Company【二分图最小路径覆盖】【Floyd】
题目大意:有Q个地点,告诉你Q个地点之间的相互距离(从i地点赶到j地点需要的时间)。有M项任务,给你M项任务所在的地点block、开始时间start和任务完成需要时间time。一个工人只有在他准备完成的下一项任务开始之前完成手上的任务,然后在下一项任务开始之前赶到下一项任务的地点,才能完成这两项任务。问:最少需要多少个工人来完成这M项任务。思路:先用Floyd算出Q个地点之间相互最短距离。然后建立一个二分图,每边都是M项任务,如果能在任务j完成之前将i任务完成并能赶到任务j的地点,就建立一条原创 2015-04-07 17:57:16 · 954 阅读 · 0 评论 -
POJ2724 Purifying Machine【二分图最小边覆盖】
题目大意:有2^N个奶酪,编号从000…00到111…11,现在有台机器有N个开关,每个开关的状态有3个,分别是'0'、'1'、'*',每个开关只能有一个状态存在。'*'状态可以替代'0'或'1'状态。比如11*1,对应为1111或1101。现在有M个奶酪被感染了,每个奶酪的编号为长度为N的二进制字符串。和开关一样,每一位上除了能为'1'、'0'之外,还可以是'*',表示既能是'0',也能是'1'。比如说1*1,既可以是101,也可以是111。现在要把这些被感染的奶酪(二进制字符串)都删除掉。删除原创 2015-04-09 11:14:00 · 886 阅读 · 0 评论 -
二分图【模板】
二分图:原图G的顶点可以分类两个集合X和Y,所有的边关联的两个顶点恰好一个属于集合X,另一个属于集合Y,则称该图为二分图。 二分图匹配:给定一个二分图G,在G的一个子图M中,M的边集中的任意两条边都不依附于同一个顶点,即一个顶点最多只有一条边。则称M是一个匹配。 二分图最大匹配:图中包含边数最多的匹配称为图的最大匹配。 二分图完美匹配:如果所有点都在匹配边上,则称这个最大匹配是完美匹配。 二原创 2015-05-05 22:12:18 · 1005 阅读 · 0 评论 -
POJ3041 Asteroids【二分图最小点覆盖】
题目大意:有一个N*N的矩阵,有些格子上有障碍物(坐标为(x,y) ),在消除这些障碍物的时候,可以一次性消除该障碍物同一行所有的障碍物,或是一次性消除该障碍物同一列所有的障碍物。只能选择清理该行或是清理该列。问:最小进行多少次消除,就可以清理所有的障碍物。思路:可以将每一行当做一个点,这样总共有N个点,作为二分图的一边。将每一列当做一个点,这样又有N个点,作为二分图的另一边。将有障碍物的行点和列点连接起来,每次只能选择行或是列,需要清除所有的障碍物。所以不能存在一条边两边的点都没有被选中的原创 2015-04-01 23:19:22 · 871 阅读 · 0 评论 -
POJ3692 Kindergarten【二分图最大独立集】
题目大意:幼儿园里边有N个男孩和M个女孩,所有男生之间都互相认识,所有女生之间也都相互认识。还有k对关系,表示某个男孩和某个女孩认识。现在要选择一些学生组成一个集合,使得这个集合中所有的人都认识,求这个集合中最多能有多少人。思路:建立二分图,图的一边为男生,另一边为女生。不能直接选取认识关系来建边,应该选取不认识的人建边,也就是认识关系的补集作为边集。这样匹配的两个人都是不认识的,求出来的最大匹配数就是最多有多少对人相互不认识。而最大独立集 = N + M - 最大匹配数,就求出了最多能能原创 2015-04-01 22:47:56 · 715 阅读 · 0 评论 -
POJ2584 T-Shirt Gumbo【二分图多重匹配】
题目大意:现在有5种型号(S、M、L、X、T)的衣服要发放给N个参赛队员。给出每个参赛者所需要衣服型号的范围。在这个范围内的型号参赛者都能接受。再给出这5种型号衣服各自的数量,那么问题来了:是否存在一种分配方案使得所有参赛队员都能够拿到自己型号范围内的衣服。思路:二分图匹配是一个对一个的匹配,这里是一对多匹配,需要用二分图多重匹配的模型来做。具体就是把原先匈牙利算法中的cy[MAXN]更换为一个2维数组cy[MAXN][MAXN]。cy[i][j]表示与元素yi匹配的第j个元素,同时用vey原创 2015-03-17 08:59:47 · 1187 阅读 · 0 评论 -
POJ2536 Gopher II【二分图最大匹配】
题目大意:有N只鼹鼠和M个洞穴,如果鼹鼠在S秒内不能够跑到洞穴,就会被老鹰捉住吃掉。鼹鼠跑的速度为V米/秒。已知一个洞穴只能容纳一只鼹鼠。给你鼹鼠和洞穴的坐标,那么问题来了:问最少有多少只鼹鼠被老鹰捉住吃掉。思路:建立一个二分图,一边为鼹鼠,另一边为洞穴枚举求出每只鼹鼠到各个洞穴的距离,把能够在S秒内跑到该洞穴(距离<=S*V)的进行连边。建好图后用匈牙利算法求出最多有多少只鼹鼠能够幸免于难( MaxMatch() ),那么剩下的N - MaxMatch()就是最少有多少只鼹鼠被老鹰捉住吃掉原创 2015-03-17 09:23:02 · 757 阅读 · 0 评论 -
HPU1179 Ollivanders: Makers of Fine Wands since 382 BC.【二分图最大匹配】
题目大意:题目太长了,简单的意思就是:有N个魔杖,M个魔法师,魔杖有多个匹配的魔法师。但是一个魔法师只能对应一根魔杖。那么问题来了:最多有多少魔法师能得到魔棒。思路:做一个二分图,一边是魔杖,另一边是魔法师。相应的匹配作为二分图的边。利用匈牙利算法,求出二分图最大匹配是多少。原创 2015-03-30 11:04:33 · 881 阅读 · 0 评论 -
POJ1274 The Perfect Stall【二分图最大匹配】
题目大意:有N头奶牛(编号1~N)和M个牛棚(编号1~M)。每头牛只可产一次奶,每个牛棚也只允许一只牛产奶。现在给出每头奶牛喜欢去的牛棚的编号。问:最多有多少头奶牛能完成产奶。思路:二分图最大匹配问题,建立一个图,用行来表示奶牛,用列来表示牛棚。将奶牛和喜欢去的牛棚编号连边。然后DFS或BFS求二分图的最大匹配数即可。原创 2015-03-13 08:01:37 · 921 阅读 · 0 评论 -
POJ1325 Machine Schedule【二分图最小点覆盖】
题目大意:有两台机器A和B,机器A有N种不同的模式,编号为0~N-1。机器B有M种不同的模式,编号为0~M-1。在一开始的时候,机器A和B都处于0模式。现在需要用两台机器来处理K项任务,任务编号为0~K-1。每一项任务都可以在A或B的指定状态下完成。例如任务1可以在机器A的2模式下完成,也可以在机器B的4模式下完成。对于第i想任务用(i,x,y)来表示第i项任务可以在机器A的x模式下或机器B的y模式下完成。为了完成所有任务,不得一次次地切换机器的工作模式。而切换机器的工作模式只能通过重启机器来完原创 2015-04-02 11:48:09 · 1008 阅读 · 0 评论 -
HDU2255 奔小康赚大钱【二分图最佳匹配】
题目大意:村里要分房子。有N家老百姓,刚好有N间房子,考虑到每家都要有房住,每家必须分配到一间房子且只能分配到一间房子。另外, 村长为了得到最大利益,让老百姓对房子进行估价。比如有3件房子,一家老百姓可以对第一间出10万,对第二间出2万,对第三间出4万,第二家老百姓可以对第一间出8万,对第二家出3万,对第三间出5万。那么问题来了:怎么分配,才能使利益最大化。(村民房子不一定能分到房,关键看领导分配)。思路:建立二分图,一边为N家老百姓,另一边为N间房子。对老百姓和房子之间估价建立一条有带权边原创 2015-04-02 15:49:29 · 1275 阅读 · 0 评论 -
POJ2195 Going Home【二分图最佳匹配】
题目大意:在一个N*M的矩阵中,有M个人和M个房子,每个人要安排一个房子,每个房子只能安排一个人。而每个人移动一步需要一美元。那么问题来了:求为每个人安排房子移动所需要的金钱最小值是多少。思路:做一个二分图,一边为人,另一边为房子,如果把人和房子之间的距离作为边权的话,问题就变成了求带权二分图最小权和的最佳匹配。这里我们为了方便计算,吧人和房子之间的距离的负值作为边权,那么就变成了求带权二分图最大权和的最佳匹配,就是经典的二分图最佳匹配问题。用KM算法解出最大权值和。取其相反,就得到了最小原创 2015-04-02 20:41:40 · 874 阅读 · 0 评论 -
POJ2226 Muddy Fields【二分图最小点覆盖】
题目大意:有一个r行c列的方格组成的田地。里边有若干个方格充满泥水,其余的方格是草。要用宽度为1、长度不限的长木板把充满泥水的方格覆盖掉,但不能覆盖草地,同时只能按行覆盖或是按列覆盖,不能斜着覆盖。问:最少要用多少木板。思路:这道题感觉很难想。看了看网上的题解,居然很巧妙的构造了二分图来求解,很是精妙。我们把同一行一段连续的泥水方格作为一个顶点,把这些点作为二分图的一个集合,再把同一列一段连续的泥水方格作为一个顶点,把这些点作为二分图的另一个集合。如果两个集合的点有相交,就建立一条边。两个集原创 2015-04-02 15:20:58 · 857 阅读 · 0 评论 -
POJ3020 Antenna Placement【二分图最小边覆盖】
题目大意:在N*M的矩阵中,有K个城市要覆盖无线网。而一个无线网基站只能覆盖左右相邻或是上下相邻的两个城市。问:至少放置多少个基站,能将这K个城市全部覆盖。输入数据时,'*'表示城市,'o'表示空地。思路:K个城市作为K个点,编号为1~K。如果有两个城市相邻,则两个城市之间建立一条双向边。现在问题变为了怎么从图中选择最少的边,使得能够覆盖所有的点。可以用二分图最小边覆盖来做。首先遍历原图,对K个城市编号,存入iMap[][]数组中。然后建立一个二分图,两边都为K个城市。如果两个城市有边(即两原创 2015-04-03 10:31:03 · 1084 阅读 · 0 评论 -
POJ3565 Ants【二分图最佳匹配】
题目链接:http://poj.org/problem?id=3565题目大意:在坐标系中有N只蚂蚁,N棵苹果树,给你蚂蚁和苹果树的坐标。让每只蚂蚁去一棵苹果树,一棵苹果树对应一只蚂蚁。这样就有N条直线路线,问:怎样分配,才能使总路程和最小,且N条线不相交。思路:用一个图来说明思路。假设A、B为蚂蚁,C、D为苹果树。则存在两种匹配:第一种原创 2015-04-02 19:37:38 · 2158 阅读 · 2 评论