摘要: 这题和其他的要用二分图匹配不太一样,只要是它允许有重叠的点可以利用,而寻找增广路径的方式是不允许一点重复利用的。所以这题要转换一下方式来间接求得。 首先对于所有的孤立进行搜索,顺带建立边的关系,对于孤立的节点一定要安放一个雷达的。然后对于剩下的的,根据贪心思想,让一个天线直接覆盖两个点的话是最优的策略,于是我们利用二分图匹配这个方法使得所有的匹配成功的边都安装天线。接下来我们再将所有没有覆盖到的点在适当位置安放天线(势必会有重复覆盖的点)。最后将三者的值相加即可。当然第一个结果和第三个结果是可以一起算的。 代码如下:#include <cstdlib>#include <cs 阅读全文
posted @ 2012-07-02 21:58 沐阳 阅读(695) 评论(0) 推荐(0) 编辑
摘要: 该题题义为给定网格的中的点的坐标,现在要去将这些点摧毁,有一种武器能够一次摧毁一行或者是一列的所有目标,问最少用多少次该武器能够使得所有的目标消失。这题怎么转化为二分图去做呢,过程是这样的,首先对于每个目标有两种方式能够让其消失,一种是在其所在行上使用武器,一种是在其所在列上使用武器。那么对于所有的目标而言,只要在行列满足之一的地方使用武器就可以全部清除目标。于是我们可以将目标所在行列进行匹配,然后再求最小顶点覆盖就可以了。因为最小顶点覆盖就是满足一条边至少有一个顶点在这个顶点集中。代码如下:#include <cstdlib>#include <cstdio>#inc 阅读全文
posted @ 2012-07-02 16:51 沐阳 阅读(192) 评论(0) 推荐(0) 编辑
摘要: 这题一个地方没注意,导致错了很多次,之后还一直没找到错误。出问题的地方就是在第一轮找入度为零的节点的时候直接找的祖先节点,导致祖先节点多次入队~~~代码如下:#include <cstring>#include <cstdio>#include <cstdlib>#include <algorithm>#include <cmath>#include <queue>using namespace std;int N, M, set[10005], pos, cc;int rec[10005][2];char r[10005 阅读全文
posted @ 2012-07-02 10:41 沐阳 阅读(406) 评论(0) 推荐(0) 编辑
摘要: 该题在给定了一些大小的关系的基础上询问是否可以断定N个数的大小关系,其实就是一个拓扑排序题。注意题义是在给定M组关系中依次处理,一旦根据1-K(1<=K<=N)能够判定是否确定或者冲突则马上退出来。如果一直到最后一组数据还没有这两种情况的话就是不能确定了。两重for循环建立边的关系,用来完成题目中要求的依次处理,对于每一种情况进行一次拓扑排序,查看是否成环或者确定关系。 成环的判定方式当每次从所有点中选取度为零的节点不能够再进行的时候,此时选取出来的点还没有N个则说明有环的存在; 如果所有的点都能够被取出来并且在整个取的过程中每次都有且尽有1个度为零的节点,那么就说明关系可以确定; 阅读全文
posted @ 2012-07-02 07:11 沐阳 阅读(363) 评论(0) 推荐(0) 编辑