摘要: 跟http://poj.org/problem?id=2318是一样的;这里就不解释了;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 N 阅读全文
posted @ 2012-07-05 21:55 wutaoKeen 阅读(109) 评论(0) 推荐(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 namespa 阅读全文
posted @ 2012-07-05 21:35 wutaoKeen 阅读(135) 评论(0) 推荐(0) 编辑
摘要: 这个题用到了黑白染色法:黑白染色法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) 编辑