UVA-11419 SAM I AM (最小点覆盖)】的更多相关文章

题意:给定一个 n * m 的矩阵,有一些格子有目标,每次可以消灭一行或者一列,问你最少要几次才能完成. 析:把 行看成 X,把列看成是 Y,每个目标都连一条线,那么就是一个二分图的最小覆盖数,这个答案就是二分图的最大匹配,在输出解的时候,就是从匈牙利树上,从X的未盖点出发,然后标记X和Y,最后X中未标记的和Y标记的就是答案. 代码如下: #pragma comment(linker, "/STACK:1024000000,1024000000") #include <cstdi…
题意:在方格图上打小怪,每次可以清除一整行或一整列的小怪,问最少的步数是多少,又应该在哪些位置操作(对输出顺序没有要求). 分析:最小覆盖问题 这是一种在方格图上建立的模型:令S集表示“行”,T集表示“列”,那么小怪站的位置w(i,j),就是二分图上的边.如此建图,那么每次清除,就是把与某个点相连的边全部清除,问最少选择多少个点.(这也是最小点覆盖的概念:选择尽量少的点,使得每条边至少有一个端点被选中) 这里有一个König定理:最大二分匹配数==最小覆盖点数. 既然是求最小点覆盖,那么自然是选…
题意:给一个r*c的矩阵,某些格子中可能有一些怪物,可以在一行或一列防止一枚大炮,大炮会扫光整行/列的怪,问最少需要多少炮?输出炮的位置. 思路: 先每行和列都放一个炮,把炮当成点,把怪当成边,一边连接行炮,另一边是列炮,只要其中任何一个扫了,另一个就不必了.所以明显是求最小点覆盖,用最少的点(即炮)覆盖最多的边(即怪).进而转成最大匹配.因 最大匹配数=最小覆盖数. 这题还得求炮的位置,也就是覆盖点集.可以根据匈牙利数来构造,而且可以用同匈牙利算法那个DFS函数,稍微加点东西而已.神奇之处在于…
题意:一个矩形——R*C的网格,在某些位置上有石头,在网格外开一炮可以打掉该行或者该列的石头,求打掉这些石头最少需要多少门大炮,位置分别设在哪行哪列(0<R<1001, 0 < C < 1001). 题目链接:http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=2414 ——>>以每行为X结点,每列为Y结点,有…
这道题挺像hdu 5093 Battle ships的,不过那道题是要求最多放置的点数,而这道题是要求最小点覆盖. 顶点覆盖的定义是:在G中任意边至少有一个端点属于顶点集合S. 一个重要的位置有(x,y)两个坐标,而要守住这个这个位置就是相当于连了一条边x到y的边. 选了一个(x,y)就相当于选了所有相同的x的边或者所有相同的y的边. 当所有的x或y被选完的时候就完成了看守.相当于是割断了x和y,所以就是最小割,对于容量为1的模型可以用匈牙利算法. 有了障碍以后只要把障碍两边的分开考虑就行了,拆…
题目链接:https://vjudge.net/problem/UVA-11419 题解: 1.二分图匹配之最小点覆盖.:把x坐标和y坐标看成是点, 图中的目标看成是边,所以最终的目的是求出用最少的点,去覆盖掉所有的边.如果在M[x][y]处有目标,则连一条边x-y.接着跑一遍匈牙利算法. 2.除此之外,题目还要求输出最小覆盖点集.可知我们已经求出了最大匹配数,首先我们把所有的覆盖点都落在左边的匹配点上.但是这样做却不能保证所有的边都会被覆盖,因为假设左边有未匹配点,且这些未匹配点与右边的点(是…
https://vjudge.net/problem/UVA-12549 题意: 在一个Y行X列的网格里有空地(.),重要位置(*)和障碍物(#),用最少的机器人看守所有重要位置,每个机器人要放在一个格子里,面朝上下左右4个方向之一.机器人会发出激光,一直射到障碍物为止,沿途都是看守范围. 思路: 把每个坐标的x和y值连成一条边,分别作为二分图的两边,用最少的点去覆盖所有的边,也就是二分图的最大匹配.由于有障碍物的存在,在建图的时候需要拆分点. #include<iostream> #incl…
https://vjudge.net/problem/UVA-11419 题意:一个网格里面有一些目标,可以从某一行,某一列发射一发子弹,可以打掉它:求最少的子弹,和在哪里打? 思路: 每个点的x坐标与y坐标相连,现在就是要找一个最小点覆盖,同时还要输出哪些点被覆盖了. #include <cstdio> #include <cstring> #include <vector> #include <algorithm> using namespace std…
/** 题目:SAM I AM UVA - 11419 链接:https://vjudge.net/problem/UVA-11419 题意:给定n*n的矩阵,'X'表示障碍物,'.'表示空格;你有一把枪,每一发子弹可以消除一行或者一列的障碍物, 问最少需要多少颗子弹可以清空障碍物?以及输出具体的哪些行,哪些列. 思路:最小点集覆盖问题,等价于最大匹配. 求具体的哪些行,哪些列,需要借助于匈牙利树.从X中所有未匹配的点出发扩展匈牙利树,标记 树中的所有点,则X中所有的未标记点和Y中的所有标记点就…
layout: post title: 训练指南 UVA - 11419(二分图最小覆盖数) author: "luowentaoaa" catalog: true mathjax: true tags: - 二分图 - 最小点覆盖 - 图论 - 训练指南 SAM I AM UVA - 11419 题目大意:给出一个R×C的网格,网格上棉纺了一些目标.可以在网格外发射子弹,子弹会沿着垂直或水平方向飞行,并且打掉飞行路径上的所有目标.你的任务是计算出最少需要多少子弹,各从哪个位置发射,才…