https://vjudge.net/problem/UVA-11419

题意:一个网格里面有一些目标,可以从某一行,某一列发射一发子弹,可以打掉它;求最少的子弹,和在哪里打?

思路:

每个点的x坐标与y坐标相连,现在就是要找一个最小点覆盖,同时还要输出哪些点被覆盖了。

 #include <cstdio>
#include <cstring>
#include <vector>
#include <algorithm>
using namespace std; const int maxn = + ; // 单侧顶点的最大数目 // 二分图最大基数匹配
struct BPM {
int n, m; // 左右顶点个数
vector<int> G[maxn]; // 邻接表
int left[maxn]; // left[i]为右边第i个点的匹配点编号,-1表示不存在
bool T[maxn]; // T[i]为右边第i个点是否已标记 int right[maxn]; // 求最小覆盖用
bool S[maxn]; // 求最小覆盖用 void init(int n, int m) {
this->n = n;
this->m = m;
for(int i = ; i < n; i++) G[i].clear();
} void AddEdge(int u, int v) {
G[u].push_back(v);
} bool match(int u){
S[u] = true;
for(int i = ; i < G[u].size(); i++) {
int v = G[u][i];
if (!T[v]){
T[v] = true;
if (left[v] == - || match(left[v])){
left[v] = u;
right[u] = v;
return true;
}
}
}
return false;
} // 求最大匹配
int solve() {
memset(left, -, sizeof(left));
memset(right, -, sizeof(right));
int ans = ;
for(int u = ; u < n; u++) { // 从左边结点u开始增广
memset(S, , sizeof(S));
memset(T, , sizeof(T));
if(match(u)) ans++;
}
return ans;
} // 求最小覆盖。X和Y为最小覆盖中的点集
int mincover(vector<int>& X, vector<int>& Y) {
int ans = solve();
memset(S, , sizeof(S));
memset(T, , sizeof(T));
for(int u = ; u < n; u++)
if(right[u] == -) match(u); // 从所有X未盖点出发增广
for(int u = ; u < n; u++)
if(!S[u]) X.push_back(u); // X中的未标记点
for(int v = ; v < m; v++)
if(T[v]) Y.push_back(v); // Y中的已标记点
return ans;
}
}; BPM solver; int R, C, N; int main(){
int kase = ;
while(scanf("%d%d%d", &R, &C, &N) == && R && C && N) {
solver.init(R, C);
for(int i = ; i < N; i++) {
int r, c;
scanf("%d%d", &r, &c); r--; c--;
solver.AddEdge(r, c);
}
vector<int> X, Y;
int ans = solver.mincover(X, Y);//把结果放在X,Y里面
printf("%d", ans);
for(int i = ; i < X.size(); i++) printf(" r%d", X[i]+);
for(int i = ; i < Y.size(); i++) printf(" c%d", Y[i]+);
printf("\n");
}
return ;
}

UVa 11419 我是SAM(最小点覆盖+路径输出)的更多相关文章

  1. Uva 11419 我是SAM

    题目链接:https://vjudge.net/problem/UVA-11419 题意:一个网格里面有一些目标,可以从某一行,某一列发射一发子弹,可以打穿: 求最少的子弹,和在哪里打? 分析: 听说 ...

  2. 训练指南 UVA - 11419(二分图最小覆盖数)

    layout: post title: 训练指南 UVA - 11419(二分图最小覆盖数) author: "luowentaoaa" catalog: true mathjax ...

  3. 紫书 习题 11-9 UVa 12549 (二分图最小点覆盖)

    用到了二分图的一些性质, 最大匹配数=最小点覆盖 貌似在白书上有讲 还不是很懂, 自己看着别人的博客用网络流写了一遍 反正以后学白书应该会系统学二分图的,紫书上没讲深. 目前就这样吧. #includ ...

  4. SAM I AM UVA - 11419 最小点集覆盖 要输出具体覆盖的行和列。

    /** 题目:SAM I AM UVA - 11419 链接:https://vjudge.net/problem/UVA-11419 题意:给定n*n的矩阵,'X'表示障碍物,'.'表示空格;你有一 ...

  5. UVA 11419 SAM I AM(最大二分匹配&最小点覆盖:König定理)

    题意:在方格图上打小怪,每次可以清除一整行或一整列的小怪,问最少的步数是多少,又应该在哪些位置操作(对输出顺序没有要求). 分析:最小覆盖问题 这是一种在方格图上建立的模型:令S集表示“行”,T集表示 ...

  6. UVA 11419 SAM I AM (最小点覆盖,匈牙利算法)

    题意:给一个r*c的矩阵,某些格子中可能有一些怪物,可以在一行或一列防止一枚大炮,大炮会扫光整行/列的怪,问最少需要多少炮?输出炮的位置. 思路: 先每行和列都放一个炮,把炮当成点,把怪当成边,一边连 ...

  7. UVA11419 SAM I AM —— 最小点覆盖 + 输出覆盖点集

    题目链接:https://vjudge.net/problem/UVA-11419 题解: 1.二分图匹配之最小点覆盖.:把x坐标和y坐标看成是点, 图中的目标看成是边,所以最终的目的是求出用最少的点 ...

  8. UVA-11419 SAM I AM (最小点覆盖)

    题目大意:在一个n*m的网格中,有k个目标,现在可以任选一行或列消除在其上的所有目标,求出最少选择次数及选法. 题目分析:经典的最小点覆盖问题,并且输出一个最小点覆盖集.在求出最大匹配之后,以未覆盖的 ...

  9. P2764 最小路径覆盖问题 (最小点覆盖=顶点数-最大匹配)

    题意:最小路径覆盖 题解:对于一个有向图,最小点覆盖 = 顶点数 - 最大匹配 这里的最大匹配指的是将原图中每一个点拆成入点.出点, 每条边连接起点的出点和终点的入点 源点S连接每个点的出点,汇点T连 ...

随机推荐

  1. iOS面试3

    转:http://studentdeng.github.io/blog/2014/02/11/baidu-interview/ 百度面试 FEB 11TH, 2014 | COMMENTS 百度移动云 ...

  2. mac必备软件

    LigthPaper:Markdown工具 ssh工具:ShellCraft

  3. 树链剖分-点的分治(dis[i]+dis[j]==k的点对数量)

    poj2114 Boatherds Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 1195   Accepted: 387 ...

  4. 【转载】网络安全---Strurts2漏洞介绍

    Apache Struts2 作为世界上最流行的 Java Web 服务器框架之一,3 月 7 日带来了本年度第一个高危漏洞——CVE编号 CVE-2017-5638 .其原因是由于 Apache S ...

  5. MySQL集群简介与配置详解

    1. 先了解一下你是否应该用MySQL集群. 减少数据中心结点压力和大数据量处理,采用把MySQL分布,一个或多个application对应一个MySQL数据库.把几个MySQL数据库公用的数据做出共 ...

  6. Quartz学习记录

    参考资料: 官方网站 Quartz使用总结

  7. php 函数__autoload与spl_autoload_register理解

    理解自:http://www.cnblogs.com/myluke/archive/2011/06/25/2090119.html __autoload的作用:当我们在一个页面使用其他文件的类方法时候 ...

  8. Magento 2 初探

    进入公司有一小段时间了,虽然自己之前一直从事前端工作,但是基本工作就是做一些国内电商网站的前端工作.在刚进入这家公司时,自己对 magento2 一无所知,尽管上班前看过老大发给我的一些文档资料,但是 ...

  9. 洛谷P3939 数颜色 二分查找

    正解:二分 解题报告: 传送门! 话说其实我开始看到这题想到的是分块,,, 但是显然不用这么复杂,,,因为仔细看下这题,会发现每次只改变相邻的兔子的位置 所以开个vector(或者开个数组也成QwQ( ...

  10. SQL Server 复制(Replication) ——事务复制搭建

    本文演示如何搭建最基本的事务复制. 环境准备: 虚拟机2台: 服务器名分别为RepA和RepB,RepA为发布服务器,RepB为订阅服务器.均安装WindowsServer 2008R2英文版(在外企 ...