题目类型  最小顶点覆盖

题目意思
给出最多10000个点的坐标 每次可以消除同一行的点或同一列的点 问至少要多少次才能把所有点都消除掉
解题方法
首先建图 每一个行号为一个点 每一个列号为一个点 那么对于一个要消除的点就对应一条这个点的行号与这个点的列号相连的边
那么消除所有点的目的就转化成对于每条边都要从这条边的两个端点找一个点与这条边关联, 即求最少的点让每条边都至少和其中的一个点关联
这就是最小顶点覆盖问题 可以证明 最小顶点覆盖数 = 最大匹配数M,  求最大匹配可以使用匈牙利算法
证明如下(黑书p332):
(1) M个是足够的。只需要让它们覆盖最大匹配的M条边,则其它边一定被覆盖 (如果有边e不被覆盖, 把e加入后得到一个更大的匹配)
(2) M个是必需的。仅考虑形成最大匹配边的这M条边, 由于它们两两无公共点, 因此至少需要M个点才能把它们覆盖
参考代码 - 有疑问的地方在下方留言 看到会尽快回复的
#include <iostream>
#include <cstdio>
#include <cstring>
#include <vector>using namespace std;const int maxn = 500 + 10;vector<int>E[maxn];
bool vis[maxn];
int y[maxn];bool dfs(int u) {for( int i=0; i<E[u].size(); i++ ) {int v = E[u][i];if(vis[v]) continue;vis[v] = true;if(y[v] == 0 || dfs(y[v])) {//printf("u = %d v = %d y[v] = %d\n", u, v, y[v]);y[v] = u;return true;}}return false;
}int main() {freopen("in", "r", stdin);int n, m;while(scanf("%d%d", &n, &m) != EOF) {for( int i=1; i<=n; i++ ) E[i].clear();for( int i=0; i<m; i++ ) {int u, v;scanf("%d%d", &u, &v);E[u].push_back(v);}int ans = 0;memset(y, 0, sizeof(y));for( int i=1; i<=n; i++ ) {memset(vis, 0, sizeof(vis));if(dfs(i)) ans++;}printf("%d\n", ans);}return 0;
}

POJ 3041 Asteroids (最小顶点覆盖)相关推荐

  1. POJ - 3041 Asteroids(最小点覆盖-二分图最大匹配)

    题目链接:点击查看 题目分析:给出一个n*n的矩阵,其中有m个敌人,每一次操作可以清除某一列或某一行中的所有敌人,问若想清除所有敌人,至少需要多少次操作 题目分析:第一次见这种题,就是最小覆盖是要用最 ...

  2. POJ 3041 Asteroids (对偶性,二分图匹配)

    题目:POJ 3041 Asteroids http://poj.org/problem?id=3041 分析: 把位置下标看出一条边,这显然是一个二分图最小顶点覆盖的问题,Hungary就好. 挑战 ...

  3. POJ - 3041 Asteroids 二分图最小点覆盖

    题目链接 二分图一个很重要的定理:看了很多大神的博客表示看不懂为什么,以后再看 最小点覆盖=最大匹配 最小点覆盖就是在二分图里边,选择一个点,将所有与该点相链接的边删去,问最小找多少个点能够把所有的边 ...

  4. POJ 3041 Asteroids(最小点覆盖)题解

    题意:n*n的网格中有k个点,开一枪能摧毁一行或一列的所有点,问最少开几枪 思路:我们把网格看成两个集合,行集合和列集合,如果有点x,y那么就连接x->y,所以我们只要做最小点覆盖就好了. 参考 ...

  5. POJ 3041 Asteroids 二分图匹配

    以行列为点建图,每个点(x,y) 对应一条边连接x,y.二分图的最小点覆盖=最大匹配 //#pragma comment(linker, "/STACK:1024000000,1024000 ...

  6. poj 3041 Asteroids

    这是一道二分匹配题,根据Konig定理:最大匹配数=最小覆盖数: 这里我们以行为左边,以列为右边建图,这样建好后,就是一个裸的二分匹配: View Code #include<iostream& ...

  7. [poj3041]Asteroids(二分图的最小顶点覆盖)

    题目大意:$N*N$的网格中有$n$颗行星,若每次可以消去一整行或一整列,求最小的攻击次数使得消去所有行星. 解题关键:将光束当做顶点,行星当做连接光束的边建图,题目转化为求该图的最小顶点覆盖,图的最 ...

  8. poj 1325 Machine Schedule 最小顶点覆盖

    题意 两个机器A,B, 分别有 N,M个工作模式, K个作业,可以在( Ai, Bj ) 模式下工作. 机器最初在模式0下. 问最小的 切换模式次数. 解题思路 A, B 两个天然二分图顶点集合,   ...

  9. POJ3041 Asteroids 二分图最小顶点覆盖 Dinic求解最大流

    题意 一个n*n的矩阵,有k个位置有小行星,一炮可以摧毁一行或一列行星 问最少需要多少炮可以摧毁所有行星 思路 把一行.一列看成节点,矩阵里的一个小行星看成一条边,如行星位置(r,c),则第r行的节点 ...

最新文章

  1. 基于Bootstrap、Jquery的自适应导航栏
  2. python中字符串的方法及注释
  3. php 提交表单跳转页面,form表单页面跳转方式提交练习
  4. 机器人简化图画手绘图_高通推出全新RB3 机器人平台,年内支持5G连接
  5. js+获取当前域名及跳转、下载操作
  6. python015 Python3 函数
  7. SSH Backgroup工具汇总
  8. cs python课程 加州大学_最新盘点!全球顶尖大学CS+数据科学的免费在线课程,共81个...
  9. SQL笔记三:MySQL常用函数
  10. 【数据蒋堂】索引的本质是排序
  11. css超链接样式+雪碧图实现导航
  12. oeasy教您玩转vim - 3 - # 打开文件
  13. DOM 详细 一篇就够【重点】
  14. 按步搭建简单IoT微服务(2)
  15. 商城-商品规格管理-商品规格参数管理
  16. 安卓app32位升级64位框架
  17. 汽车变速系统的换挡律
  18. jquery通过name,id名称获取当前value值
  19. word图文混排复制到wangEditor图片不显示
  20. OpenJudge NOI 1.8 20:反反复复

热门文章

  1. 计算机视觉会议和期刊等级分类-----2021.07
  2. PS教程!手把手教你绘制一枚经典的iTunes图标
  3. 私藏!React 硬核涨薪指南
  4. 【Flutter 问题系列第 46 篇】如何修改 Flutter 项目的包名
  5. Unity3D中的第三人称镜头的脚本控制
  6. SAP后台执行大数据量报表
  7. 【去后厂村开游戏厅吧】基于pp-tinypose的体感飙车避障游戏
  8. Blockchain性能扩容(1)- (Size, Segwit, Sidechain)
  9. iOS16系统开启开发者模式
  10. 【poi第七节】poi设置excel 设置字体格式,java设置excel设置字体格式