摘要: 1 /* 2 这个题目有点意思,并不是求总共需要多长时间来完成订单, 3 而是要求完成顶点的总时间。 4 5 这个总时间是包括订单的等待时间的 6 7 因为有可能有多个订单都要到工厂j去完成,那么就浪费了很多时间,这些时间也算是总时间里面的 8 9 所以。每个工厂有可能有N个订单在等待来完成,所以工厂要拆开成N个点来构图 10 11 注意此题的左右顶点不同,和传统的KM写的时候要注意点,不然会TLE或者WA的不明不白 12 */ 13 14 // include file 15 #include <cstdio> 16 #include <cstdlib> 17 #in 阅读全文
posted @ 2011-03-07 20:33 AC2012 阅读(893) 评论(0) 推荐(0) 编辑
摘要: 1 /* 2 配对问题,蚂蚁和苹果树之间的距离和最小的时候,肯定是不相交的时候 3 4 利用的是三角不等式原理 5 6 可用KM算法解决 7 */ 8 9 // include file 10 #include <cstdio> 11 #include <cstdlib> 12 #include <cstring> 13 #include <cmath> 14 #include <cctype> 15 #include <ctime> 16 17 #include <iostream> 18 #include 阅读全文
posted @ 2011-03-07 18:20 AC2012 阅读(729) 评论(0) 推荐(0) 编辑
摘要: 1 /* 2 二分匹配的题目真的有意思 3 如何把问题转化为二分图模型,这才是问题的关键,其他都是浮云 4 */ 5 6 // include file 7 #include <cstdio> 8 #include <cstdlib> 9 #include <cstring> 10 #include <cmath> 11 #include <cctype> 12 #include <ctime> 13 14 #include <iostream> 15 #include <sstream> 16 # 阅读全文
posted @ 2011-03-07 16:37 AC2012 阅读(914) 评论(0) 推荐(0) 编辑
摘要: 1 /* 2 应用KM算法,求最小权和 3 4 当然也可以使用最小费用最大流来做 5 6 此题目非常的有意思 7 8 首先对于KM的使用,改怎么用? 9 10 因为K个商品之间没有什么关系,所以对每个商品建一个二分图,求出最小权和,就是最后的结果 11 12 然而对于每一幅二分图改怎么建立呢,因为KM是完备匹配,所以每个商人需要几个该商品,就需要几个点,也就是说左边的N个 13 商人要按照他们需要多少商品拆点,右边同样如此。这样一个活生生的带权二分图就呈现在我们眼前了 14 剩下的就是KM的事情啦 15 哈哈~~ 16 */ 17 18 // include file 19 #include. 阅读全文
posted @ 2011-03-07 14:58 AC2012 阅读(495) 评论(0) 推荐(0) 编辑
摘要: 1 /* 2 最小权完备匹配 3 4 这题目是 带权二分图的最大/小权问题,可以用hungarian算法的扩展算法Kuhn-Munkres算法来解决 5 6 Kuhn-Munkres算法利用二分图最大匹配的思想来找出最大/小权匹配 7 */ 8 9 // include file 10 #include <cstdio> 11 #include <cstdlib> 12 #include <cstring> 13 #include <cmath> 14 #include <cctype> 15 #include <ctime&g 阅读全文
posted @ 2011-03-07 10:38 AC2012 阅读(859) 评论(0) 推荐(0) 编辑
摘要: 1 // include file 2 #include <cstdio> 3 #include <cstdlib> 4 #include <cstring> 5 #include <cmath> 6 #include <cctype> 7 #include <ctime> 8 9 #include <iostream> 10 #include <sstream> 11 #include <fstream> 12 #include <iomanip> 13 #include 阅读全文
posted @ 2011-03-05 22:34 AC2012 阅读(216) 评论(0) 推荐(0) 编辑
摘要: 1 /* 2 最小路径覆盖问题 3 */ 4 5 // include file 6 #include <cstdio> 7 #include <cstdlib> 8 #include <cstring> 9 #include <cmath> 10 #include <cctype> 11 #include <ctime> 12 13 #include <iostream> 14 #include <sstream> 15 #include <fstream> 16 #include & 阅读全文
posted @ 2011-03-05 17:17 AC2012 阅读(366) 评论(0) 推荐(0) 编辑
摘要: 1 /* 2 最小路径覆盖 3 4 每个垃圾是个顶点 5 */ 6 7 // include file 8 #include <cstdio> 9 #include <cstdlib> 10 #include <cstring> 11 #include <cmath> 12 #include <cctype> 13 #include <ctime> 14 15 #include <iostream> 16 #include <sstream> 17 #include <fstream> 阅读全文
posted @ 2011-03-05 16:14 AC2012 阅读(844) 评论(0) 推荐(0) 编辑
摘要: 1 /* 2 这个题目和1422有区别,每个顶点可以有多于一条路径经过他 3 4 那么会出现一些问题 5 6 比如 5个顶点,1->2 2->3 4->2 2->5,很显然,如果用最小路径覆盖直接求,那么就大难就是3 7 原因是1->2 2->3,之后2不能在经过了,所以 4->2->5不能通过,故而4是一条路径,5也是一条路径,答案就是3了 8 9 然而如果正确解是 4->2->5也是可以通过的,为了通过2,可以先使用floyd算法把所有的两个能连接的点都画上线。这样以后再匹配的时候, 10 就可以绕过已经匹配过得点了。默认已经可以 阅读全文
posted @ 2011-03-05 15:37 AC2012 阅读(483) 评论(0) 推荐(0) 编辑
摘要: 1 /* 2 求最小的路径覆盖 3 4 最小路径覆盖在数值上和 最大独立集是等价的 5 6 最小路径覆盖(二分图) = N - 最大匹配 7 8 在这题中,将每个十字路口拆成两点1' 1'' 9 10 这样如果有两个十字路口之间有路 那么 1' -> 2''之间画线 11 12 这样就构成了一个二分图。现在题目要求,最小路径覆盖个数 13 14 如果没有连线,那么最大匹配就是0,则每个点都需要伞兵啦 15 16 如果有一个连线,那么最大匹配是1,则少用一个伞兵 17 18 同理,没增加一个匹配,则少一个伞兵,所以这样就容易理解了最小的路径覆 阅读全文
posted @ 2011-03-05 14:33 AC2012 阅读(724) 评论(0) 推荐(0) 编辑