二分图匹配
RookieGD
游戲開發學習
展开
-
poj3020 Antenna Placement
还是一道二分图最大匹配问题,求最小路径覆盖,解题的关键在于如何把城市图转化为二分图。由于题目说,最多覆盖两个城市,可知每两个邻接的城市之间都会有关系。因此把城市编上号就可以构造出一个二分图了。我们需要找的是“最少的关系覆盖所有顶点”,很容易联想到的就是最小路径覆盖。 公式:最小路径覆盖 = 顶点数 - (最大二分匹配/2) 这是别人写的公式证明:http://hi.baidu.com/soon原创 2012-07-25 13:33:06 · 399 阅读 · 0 评论 -
poj2112 Optimal Milking
由于之前没做过多重二分匹配问题,所以一直没有头绪,折磨了我好久,后来看到别人用二分查找+floyd+网络流 来实现,自己也就用这种方法A掉了。 具体方法是: 1)先用floyd求到任意milking machine到 任意奶牛之间距离 2)查找到最长的一条距离,并记录下来为max,那么我们就可以知道,要求的值就是在 [0,max]区间 3)下面就开始二分查找了,找到0到max之间,最小的原创 2012-08-01 09:22:55 · 1350 阅读 · 0 评论 -
poj2446 Chessboard
判断是否是完全匹配,和poj3020相似,给格子编号,由于水平不够效率很低,很多大神用的完全匹配,有一点值得学习,就是根据i+j的奇偶性,把点分成两个集合。 #include #include using namespace std; bool vis[33*33]; int result[33*33]; bool edge [33*33][33*33]; struct c { int x原创 2012-07-25 17:04:47 · 660 阅读 · 0 评论 -
poj2195 Going Home
题义:在一个图上,n个人回n个家,可以路过家门而不进去,图中m代表人,H代表家,每人走一步,需要花费1元,求要是这些人都回家,最少花多少。 分析:看到题目后首先可以想到的就是人和家是2个集合,人不能与人相连,家也不能与家相连,那么就可给人和家编号,从而构造出一幅2分图,由于可以过门而不入,就说明途中没有障碍物,这就意味着不必去广搜,直接找坐标之间的关系,来确定两点之间的开销。 只是一道KM算法原创 2012-07-28 13:43:31 · 1149 阅读 · 0 评论 -
poj3565 Ants
使用KM算法,我写过一个,思路是把蚂蚁和树分为两个集合,但是莫名其妙的错了,然后在网上又查了一段代码,和我的方法相同,甚至代码内容差不多,但人家A了,郁闷啊。。。求助。 错误代码: #include #include using namespace std; const int MAXN = 101; const int inf = 0x3ffffff; double edge[MAXN][M原创 2012-07-28 21:44:52 · 602 阅读 · 0 评论 -
poj 1422Air Raid
最小路径覆盖,给定一个有向图,在这个图上的某些点上放伞兵,可以使伞兵可以走到图上所有的点。且每个点只被一个伞兵走一次。问至少放多少伞兵。 我们可以把问题转化为,在图上的边中选出一些边,使得每个点的如度与出度都不超过1。 我们开始在图上的每个点都放上伞兵,然后每选出一条边,就意味着有一个伞兵可以被取消掉了。也就是说需要的最少伞兵数=点总数-能选出的最大边数。 我们只要求最大边数即可原创 2012-08-12 10:49:08 · 494 阅读 · 0 评论 -
poj 1325 Machine Schedule
一开始觉得没有思路,后来发现,任何一个job都可以和两端的机器的方法各有一条连线,那么路径数即为job的个数。因此,求出覆盖所有路径所需的最小点数即为解。便转化为最小点覆盖问题。 /* 题意:有两台机器A和B,分别有n种和m种不同的模式,有k个工作,每个工作都可以在 那两个机器的某种特定的模式下处理,如job[0]既可以在A机器的3号模式下处理, 也可以在B机器的4号模式下处理,机器的工作原创 2012-08-12 09:30:50 · 457 阅读 · 0 评论 -
poj3041 asteroids
我的第一道二分图匹配题,把矩阵构造为二分图由两部分点集构成,坐标(x,y)出游障碍物即可看为集合A中的x与集合B中的y邻接,问题就转化成为选择最少的一些点(x或y),使得从这些点与所有的边相邻,即转化为了最小点覆盖问题。由二分图最大匹配的König定理:最小点覆盖数 = 最大匹配数。用匈牙利算法即可求值。 #include using namespace std; const int MAX原创 2012-07-25 09:49:25 · 414 阅读 · 0 评论 -
poj 3343 Against Mammoths
题目超长,难在读题,理解题以后就可以看出是一道二分查找+最大匹配的题目了 题意:有n个人类星球,m个外星球,每个星球上开始sh艘飞船,之后每年会生产p艘飞船,人类想要战胜所有的外星球,每个人类星球和每个外星球的距离已知(需要耗费年),比如在a年初,人类星球H向外星球A宣战,那么人类会带上sh+p*a艘飞船进攻,经过k年后到达外星球,这时外星球飞船的数量为sh'+p'*(a+k),如果这时人类飞船原创 2012-08-28 11:17:08 · 1005 阅读 · 0 评论