ACM算法练习题单: 二分图问题

版权声明:本文原创如果喜欢,欢迎转载。^_^ https://blog.csdn.net/ccutyear/article/details/58715941

    经过了整整一个寒假我总算是完成图论算法中的一块---二分图问题。在这个寒假即将结束时候写一篇二分图问题的总结。

    首先我指的二分图问题包括二分图染色、二分图匹配、一般图匹配。我在二分图染色的中指练习了图中结点的染色。(貌似还有边染色,不过我还没练过)然后,在二分图匹配中除了包括最大匹配、最小边覆盖、最大独立集、最小顶点覆盖还有二分图多重匹配和二分图最佳匹配。一般图匹配就只有一个带花树算法了。(这个我个人感觉比较难,所以就没有做过多的练习,只要能熟练的套模板就好了^_^)  

    接下来就列举出我在这一个寒假中刷的这些题。(主要是HDU)除了会简单的讲明题意以外还会说一下我的个人想法。

1.HDU 1045 Fire Net :

题意:已知一整个地图上的障碍的位置,现在需要在地图上安置大炮,大炮会往上下左右进行炮轰。但是,无法射穿障碍。问:最多可以放置多少台大炮。

想法:这个是我做的第一题二分图题。现在回想起来当初我做这个完全是依靠其他大神的博客AC的,我现在感觉这个题如果是让第一次做二分图题做应该会很吃力。

2.HDU 2444 The Accomodation of Students :

题意:已知n个同学两两之间的认识关系表,问:能否把这些同学全部分到两个房间中,使得每个同学都不认识同房间中的其他人。

想法:这个题只要是能看懂题,基本上马上就能明白这个是一个二分图染色的题。

3.HDU 1083 Courses :

题意:P门课N名学生,已知每门课有哪名学生来上课。问:每门课都有一个课代表,而且每个课代表都不是同一个人。

想法:这个题的题面非常奇怪,看了很久才看懂。那时看懂这个题还是通过样例才明白的。

4.HDU 1281 棋牌游戏:

题意:中文题,题意省略。

想法:我做这个题的时候是我刚开始做练二分图不就的时候,刚开始还不知道应该怎么处理,是在看了其他的人博客的时候才恍然大悟的。

5.HDU 2819 Swap:

题意:已知了一个0、1图,问:如何通过交换行或者列使得对角线上全是“1”。

想法:当时我做这个题的时候也是不知道该怎么处理,也是在看了别人的博客后才知道怎么把这个题转化成二分图匹配来做的。看来我做的还是太少了。

6.HDU 2389 Rain on your Parade:

题意:给出了每个人的坐标与速度和没把伞坐标,问:有人多少人能拿到伞。

想法:虽然这是也是二分图匹配的题。但是,他用的算法是一个非常麻烦的HK算法。(至少我是认为这个算法很麻烦。)这也是我第一次使用HK算法的题。

7.HDU 4185 Oil Skimming:

题意:给出了海面的情况,现在要用1*2的“勺子”来捞油。捞上来的只有必须要只有油才行,不能油水混合,同时每一块油只能捞一次。问:最多可以捞几次。

想法:我当时经过了前面几个坑爹题的洗礼后,很快就明白了这个题应该要怎么做了。

8.POJ 3020 Antenna Placement:

题意:需要用1*2的无线覆盖“*”,已知地图。问:最少需要多少信号点才能覆盖所有的“*”。

想法:这个与HDU 4185是相似的不同的是HDU 4185只需要求出最大匹配即可,而这题是“*”的数量减最大匹配数。

9.HDU 1054 Strategic Game:

题意:已知一个图的连接方式,只能在节点上安排士兵监视相邻边。问:最少需要多少士兵才能监视每一条边。

想法:从题意上就很容易就能看出这个是最小顶点覆盖,只要会最小顶点覆盖的人很容易就会知道该怎么做。

10.HDU 1151 Air Raid:

题意:已知城镇的路口数和边数,每条边是单向的而且不存在环。已知城镇的各路口的连接方式。一个士兵问降落到一个路口后可以顺着街道去下一个路口。问:最少需要多少士兵才能搜索到每个路口和街道。

想法:这个是有向无环图的最小路径覆盖题和无向图的最小边覆盖相似。

11.POJ 2594 Treasure Exploration:

题意:给出的一个单向图无环,同一个机器人不能经过同一个点两次,不同的机器人则没关系。问:最少需要多少个机器人能访问所有的节点。

想法:因为题目已经保证有向无环图。所以,这里就已经意味着同一个机器人不会经过同一个点两次。(后更

12.HDU 3829 Cat VS Dog:

题意:已知每个孩子喜欢和讨厌某只狗或者猫。只有喜欢的动物留下,讨厌的动物除去那个孩子才会高兴。问:最多有多少个孩子会高兴。

想法:这是一个非常有趣的题。对输入的处理方式非常有趣。

13.POJ 2289 Jamie's Contact Groups

题意:已知几个朋友应该分到第几组。问:在符合条件的情况下进行分组,最大一组的人数最小是多少人。

想法:这个是一个二分+多重匹配的模板题,是一个非常棒的题。

14.POJ 2112 Optimal Milking:

题意:已知各机器和各牛之间的所有距离,和每台机器最多供多少头牛使用。问:最远行走的牛所需要走的最小距离。

想法:因为做过前面的一题所以这个很容易就能想到用二分+多重匹配来做。

15.POJ 3189 Steady Cow Assignment:

题意:已知每头牛对它可选择的住处进行了排名,以及每个住处最多可容纳多少头牛。我们需要让每头牛的开心程度尽可能相近。问:所有牛中最开心的和最不苦恼的差值最小值。

想法:虽然很明显是多重匹配,但是,很容易明白这个不是用二分的方式。所以,这个题的做法还是相当新颖的。

16.HDU 2255 奔小康赚大钱

题意:中文题,题意省略。

想法:最佳匹配的模板题。

17.HDU 3488 Tour:

题意:已知一个有向图和每条边的权值。问:最小花费多少可以使得有向图中会有一个环,同时所有的顶点又要包含其中。(保证有答案。)

想法:大致看了题,还以为是最小生成树,仔细一想如果在图中有一个环且包含所有的点则其中所有的点都会有一个匹配。在加上要使花费最少所以就是二分图最佳匹配了。只是坑点在于在输入上可能会有重边。(我喜欢称作它为二分图最差匹配。)

18.HDU 4687 Boke and Tsukkomi:

题意:在一群女孩中已知哪些女孩可以两两组合参加比赛。问:哪些组合多余。

想法:这个是一般图匹配带花树算法的模板题。

19.HDU 3446 daizhenyang's chess:

题意:在棋盘上有些位置能踩,同时在棋的走法也有限制,如果一个已经走过的位置就不能再走了。当一个玩家无法在走时就算输。问:先手是必输还是必赢。

想法:刚开始看完题后感觉怎么看都不像是一般图匹配,像是博弈。然后参考了别人博客之后才明白。

20.UVA 11080 Place the Guards:

题意:已知一个国家中各路口的连接情况。在一个路口中的士兵能监视相邻的几条街道。同时,同一条街道不能由两个士兵来监视。问:是否能有一种士兵的安排方式来监视所有的街道。如果有最少需要多少士兵。

想法:只要会二分图染色,在看完题后很容易就会知道应该怎么做。但是,注意题中的路口不一定会全部联通。同时,在做的过程中也需要注意很多细节。

21.HDU 3478 Catch:

题意:一个小偷从要逃跑,每过一秒就必须移动到相邻的路口。已知各路口的链接情况。问:是否存在某一秒小偷可能出现在所有地方。

想法:在做了UVA 11080后这个题也就很好想,只需判断是否是二分图。如果不是在看看是否所有的路口都联通就行了。

22.POJ 1325 Machine Schedule:

题意:机器A有n种模式,机器B有m种模式。有k个任务,第i个任务需要A机器在Ai模式下同时B机器在Bi模式下进行,如果机器模式的调大则不需要重启如果调小则需要重启。每次重启后在会停在0模式下。问:最少重启几次就可以完成所有任务。

想法:还是很容易就能看出这个是最小顶点覆盖问题,只不过重启的时候会停在0模式下,这个前提有点小坑。

23.POJ 2584  T-Shirt Gumbo:

题意:已知来的人所能穿的T恤的尺寸范围。以及不同尺寸的T恤的数量。问:要求想法:很简单的二分图最大匹配问题。

24.HDU 4751 Divide Groups:

题意:现在要把来的人分成两组,要求在这两组中的所有人都能相互认识。问:是否存在一种分配方式。

想法:很明显是二分图染色,只是要求所有人都相互认识这点稍微有点坑。假设A认识B,B不认识A。则A和B都不能分到同一组。这是一个注意点。

25.POJ 2771 Guardian of Decency:

题意:老师带着一群同学出去玩,但是,老师怕他们玩好后变成情侣。假设满足一些条件的中的某个条件时不会变成情侣。问:老师最多可以带多少人去。

想法:怕一些人变成情侣。如果有一对人可以变成情侣,则只带其中的一个人。最终答案就是总人数 - 最大匹配数。

26.POJ 3565 Ants:

题意:已知每颗苹果树的位置和每个蚁穴的位置,每个蚁穴中的蚂蚁只能去一颗苹果树上去寻找食物。同时一个蚁穴到苹果树的路线是互不相交的线段。问:是否能让每个蚁穴都到一颗苹果树的上去寻找食物。

想法:这题可以是二分图最佳匹配来求解。而用到的定理是“三角形的两边之和大于第三边。”除了使用最佳匹配还可以使用几何方法之间判断两个线段是否相交。但是,答案不唯一。如果有多个正确答案只要输出一个即可。(这一点题目中没说。)

27.HDU 1533 Going Home:

题意:在一个地图显示了每个人和每个房子的位置。每个房子只能让一个人进入。问:如果让所有都有一个住处,所有人走的总步数最少是多少。

想法:知道了地图之后就不能只能每个人到每个房子的距离。然后只要最佳匹配就行了。

28.POJ 2239 Selecting Courses:
题意:一周一共有七天每天十二节课。已知每个课程的多个上课时间。问:我们最多可以一周上几节课。(同样的课程不用上两次。)

想法:简单的最大匹配。

 

    我个人感觉在学习过程中还是二分图染色最简单也最好理解。而且,在学完二分图染色后就会明白为什么二分的中的算法在一般图中不能使用。二分图匹配的算法用匈牙利算法和HK算法。如果是学习HK算法最好是先理解最大流算法中Dinic算法。从二分图的练习过程中到多重匹配是还是比较好理解的。当到最佳匹配时时一个难度。然后最难的就是一般图匹配。这是我个人在二分图匹配练习中的感觉。








猜你喜欢

转载自blog.csdn.net/ccutyear/article/details/58715941