上一页 1 ··· 8 9 10 11 12 13 14 15 16 ··· 27 下一页
摘要: 这个题用到了黑白染色法:黑白染色法101111001又是一个图,要求是把方格里的所有的1改为零,一次最多只能修改相邻的两个,为最少需要修改几次?有是一个求最值得问题,但是似乎用于求最值的算法(贪心,动态规划……)都派不上用场,既然在这里提出,那么他肯定能用二分图最大匹配解决,关键是如何建图?既然是每次只能拿相邻的两个,是两个,正好我们匹配的时候也是找两个进行匹配,这是否就是这个题和最大二分图匹配相联系的地方呢?对就是这里。但是每个点能和他四周的四个点匹配,那么我们怎么把所有的点分成来那个部分呢?对就是要把第i个点放到第一部分,第I个点周围的四个点放到第二部分,再把这四个点周围的16点放到第1部 阅读全文
posted @ 2012-07-05 18:55 wutaoKeen 阅读(141) 评论(0) 推荐(0) 编辑
摘要: 这是一道求最大独立集的问题;View Code #include<iostream>#include<cstdio>#include<cstdlib>#include<algorithm>#include<cmath>#include<queue>#include<set>#include<map>#include<cstring>#include<vector>using namespace std;bool G[524][524],visit[524];int match 阅读全文
posted @ 2012-07-05 18:13 wutaoKeen 阅读(96) 评论(0) 推荐(0) 编辑
摘要: 二分匹配问题 :最小覆盖=最大匹配这道题要用匈牙利算法求最大匹配,机器A的所有模式为左部顶点,机器B的所有模式为右部顶点,然后A与B之间的每条连线代表一个任务或工作,问题是为什么最大匹配数就是机器要重启的次数。我们可以这么想,因为要通过安排机器的顺序来使重启次数最少;所以跟机器的顺序就没什么关系了;所以A机器一定能被B机器替代;那么我们就只要找B的最小覆盖点就可以;此题还要注意的一点是机器A、B启动时的模式都是0模式,所以若有在0模式可完成的任务就不能考虑在内,我们就可以从1开始遍历就好了。View Code #include<iostream>#include<cstdio 阅读全文
posted @ 2012-07-05 17:27 wutaoKeen 阅读(146) 评论(0) 推荐(0) 编辑
摘要: 最大独立集: 在N个点的图G中选出m个点,使这m个点两两之间没有边,求m最大值。如果图G满足二分图条件,则可以用二分图匹配来做。最大独立集点数 = N - 最大匹配数。这里我们将孩子看成A,B集;如果A喜欢的动物与B不喜欢的动物相同那么我们就连线;我们就认为第i号人与第j号人相冲突,要么选i号,要么选j号;因此就成了选取最小点覆盖问题,也就是去除最少的人的冲突;这里要注意就是要建双向边,因为第i号人与第j号人相冲突必然第j号人与第i号人相冲突;最大独立集点数 = N - 最大匹配数/2。View Code #include<iostream>#include<cstdio&g 阅读全文
posted @ 2012-07-05 15:25 wutaoKeen 阅读(168) 评论(0) 推荐(0) 编辑
摘要: 题意:出租车公司有n个预约, 每个预约有时间和地点, 地点分布在二维整数坐标系上, 地点之间的行驶时间为两点间的曼哈顿距离(|x1 - x2| + |y1 - y2|)。一辆车可以在运完一个乘客后运另一个乘客, 条件是此车要在预约开始前一分钟之前到达出发地, 问最少需要几辆车搞定所有预约。这里用到的知识是 最小路径覆盖 = 总节点数 – 最大独立集数(最大匹配数);这里建图要注意的是如果这个地方没预约,我们可以从这个地方开到有预约的地方去;所以这个地方要发费时间;View Code #include<iostream>#include<cstdio>#include&l 阅读全文
posted @ 2012-07-05 08:43 wutaoKeen 阅读(171) 评论(0) 推荐(0) 编辑
摘要: 最小路径覆盖数=顶点数n-最大匹配数;定义 一个PXP的有向图中,路径覆盖就是在图中找一些路径,使之覆盖了图中的所有顶点,且任何一个顶点有且只有一条路径与之关联;(如果把这些路径中的每条路径从它的起始点走到它的终点,那么恰好可以经过图中的每个顶点一次且仅一次);如果不考虑图中存在回路,那么每条路径就是一个弱连通子集. 由上面可以得出: 1.一个单独的顶点是一条路径; 2.如果存在一路径p1,p2,......pk,其中p1 为起点,pk为终点,那么在覆盖图中,顶点p1,p2,......pk不再与其它的顶点之间存在有向边. 最小路径覆盖就是找出最小的路径条数,使之成为P的一个路径覆盖. 路.. 阅读全文
posted @ 2012-07-04 16:51 wutaoKeen 阅读(131) 评论(0) 推荐(0) 编辑
摘要: 这是一道二分匹配题,根据Konig定理:最大匹配数=最小覆盖数;这里我们以行为左边,以列为右边建图,这样建好后,就是一个裸的二分匹配;View Code #include<iostream>#include<cstdio>#include<cstdlib>#include<algorithm>#include<cmath>#include<queue>#include<set>#include<map>#include<cstring>#include<vector>usin 阅读全文
posted @ 2012-07-04 14:47 wutaoKeen 阅读(138) 评论(0) 推荐(0) 编辑
摘要: 这是一道裸的二分匹配题:View Code #include<iostream>#include<cstdio>#include<cstdlib>#include<algorithm>#include<cmath>#include<queue>#include<set>#include<map>#include<cstring>#include<vector>using namespace std;int visit[524],partner[524],K,N,M,G[524 阅读全文
posted @ 2012-07-04 11:46 wutaoKeen 阅读(93) 评论(0) 推荐(0) 编辑
摘要: 这是一道拓扑排序题;View Code #include<iostream>#include<cstdio>#include<cstdlib>#include<algorithm>#include<cmath>#include<queue>#include<set>#include<map>#include<cstring>#include<vector>using namespace std;class AOV{public: int num; AOV *next;};cl 阅读全文
posted @ 2012-07-04 10:18 wutaoKeen 阅读(103) 评论(0) 推荐(0) 编辑
摘要: 道题比较坑,就是输入N,M之后可能有多个空格这里要注意;方法:1:建图,把A进行编号在存储到图中;2:利用BFS找出任意两点的最短距离;3:利用kruscal生成最小生成树;View Code #include<iostream>#include<cstdio>#include<cstdlib>#include<algorithm>#include<cmath>#include<queue>#include<cstring>#include<vector>using namespace std;in 阅读全文
posted @ 2012-07-01 19:24 wutaoKeen 阅读(215) 评论(0) 推荐(0) 编辑
上一页 1 ··· 8 9 10 11 12 13 14 15 16 ··· 27 下一页