摘要: 问题给定你一个n*m的图,图中有些‘*’点,其他是‘0’点,在每个‘*’点可以建雷达,每个雷达可以覆盖其上下左右四个方向的‘*’点之一,问你最少建多少雷达,可以将这些‘*’点全部覆盖。分析二分图,构图,如果我们把每个‘*’点虚拟成一个节点,分布在二分图的两侧。然后,如果两点能相互覆盖,我们就在两点之间连一条边。要求的问题就转化成了,二分图最小边覆盖!为什么是二分图呢,以为每个点只能覆盖出自身之外的一个节点,这恰好满足匹配的定义。怎样求解二分图中的最小边覆盖呢。我们知道,一个匹配可以覆盖到2个不同的节点,那么二分图最大匹配覆盖到的节点数=最大匹配数*2。还没有被覆盖到的节点=总共的节点数-最大匹 阅读全文
posted @ 2011-03-20 20:55 liukee 阅读(248) 评论(0) 推荐(0) 编辑
摘要: 问题给你一个n*n的图,上面有m个需要清楚的障碍,每次可以消除一行或者一列上的障碍物。问你最少用多少次,可以消除图上的所有障碍。分析关键是构图,我们将原图抽象成一个二分图:左边是x,右边是y,如果(x,y)上有障碍物,那么就连一条边。我们的任务是消除障碍物,也就是说,用最少的点覆盖图中所有的边!也就是求二分图的最小点集覆盖!我们用到一个强大的定理:二分图最小点集覆盖数=最大匹配数,网上有好多证明。这里大体说一种思路,如果最大匹配的边涉及到的点无法将所有边覆盖,那么当前匹配一定不是最大匹配!codeprogram liukee;var a:array[1..1200,0..1200] of lo 阅读全文
posted @ 2011-03-20 20:46 liukee 阅读(233) 评论(0) 推荐(0) 编辑