题意:
      给你一个n * n 的矩阵,和X所在的坐标,问你最少放多少个**可以把图里的所有X都覆盖,每个**可以覆盖一行,或者一列。

思路:
      最小顶点覆盖,最小顶点覆盖=二分匹配,每一行最多放一个,每一列最多放一个,对于每一个点,他只要被一行或者一列照应就行了。

所以直接把X所在的点的行和列连接在一起,(二分后对于当前点相当于只选择一个),这样最后每个点都会被照应到,同时尽可能地去匹配了,也就是尽可能地减少了浪费。


#include<stdio.h>
#include<string.h>#define N_node 550
#define N_edge 255000typedef struct
{int to ,next;
}STAR;STAR E[N_edge];
int list[N_node] ,tot;
int mk_dfs[N_node] ,mk_gx[N_node];void add(int a ,int b)
{E[++tot].to = b;E[tot].next = list[a];list[a] = tot;
}int DFS_XYL(int x)
{for(int k = list[x] ;k ;k = E[k].next){int to = E[k].to;if(mk_dfs[to]) continue;mk_dfs[to] = 1;if(mk_gx[to] == -1 || DFS_XYL(mk_gx[to])){mk_gx[to] = x;return 1;}}return 0;
}int main ()
{int n ,m ,i;int a ,b;while(~scanf("%d %d" ,&n ,&m)){memset(list ,0 ,sizeof(list));tot = 1;for(i = 1 ;i <= m ;i ++){scanf("%d %d" ,&a ,&b);add(a ,b);}int sum = 0;memset(mk_gx ,255 ,sizeof(mk_gx));for(i = 1 ;i <= n ;i ++){memset(mk_dfs ,0 ,sizeof(mk_dfs));sum += DFS_XYL(i);}printf("%d\n" ,sum);}return 0;
}

POJ3041 最小顶点覆盖相关推荐

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

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

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

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

  3. 最大匹配、最小顶点覆盖、最大独立集、最小路径覆盖(转)

    在讲述这两个算法之前,首先有几个概念需要明白: 二分图:  二分图又称二部图,是图论中的一种特殊模型.设G=(V,E)是一个无向图,如果顶点V可以分割为两个互不相交的子集(A,B),并且图中的每条边( ...

  4. poj2226(最小顶点覆盖)

    (相当于是poj3041的进阶版,不过难度还好) 题目大概意思为将一个矩阵中的泥泞部分给覆盖起来,可以横着覆盖也可以竖着覆盖,但不能覆盖到其他草地部分,覆盖的板子长度随意,宽度为1,可以重复覆盖,求最 ...

  5. hdu 1054(最小顶点覆盖)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1054 思路:最小顶点覆盖 == 最大匹配(双向图)/2...不过一开始是用邻接矩阵,傻傻的TLE... ...

  6. hdu 1498(二分图最小顶点覆盖)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1498 解题思路: 这题看上去很和二分图的最小顶点覆盖很相似,但关键怎么处理多个不同颜色的气球. 其实就 ...

  7. HDU1054+最小顶点覆盖

    View Code /* 最小顶点覆盖:选出最少的点,这些点的关联的边都被覆盖 最小顶点覆盖等于最大匹配*/ #include<stdio.h> #include<stdlib.h& ...

  8. 【每日算法】【图论】【最小边覆盖 最小路径覆盖 最小顶点覆盖 最大独立集 最大团】

    最小边覆盖 = 最大独立集 = |V| - 最大匹配数 这个是在原图是二分图上进行的 最小路径覆盖和最小边覆盖不同,不要求给的图是二分图,而是要求是N x N的有向图,不能有环,然后根据原图构造二分图 ...

  9. hdu1054(最小顶点覆盖)

    传送门:Strategic Game 题意:用尽量少的顶点来覆盖所有的边. 分析:最小顶点覆盖裸题,最小顶点覆盖=最大匹配数(双向图)/2. #include <cstdio> #incl ...

最新文章

  1. HDB3的matlab编译码
  2. python解析mht文件_php解析mht文件转换成html的方法
  3. angular.js国际化模块
  4. SUSE11 搭建iscsi target 配置
  5. sql出现列名无效的原因_学会SQL并不难,小白学习记录之二(简单查询)
  6. matlab simulink_简单五步实现 MATLAB/Simulink 锂电池建模
  7. 机器学习笔记III: 基于支持向量机的分类预测
  8. EXTRONICS推出IRFID500便携式UHF RFID读写器
  9. html 透视效果,html – CSS – 对背景图像的“敲除”/透视效果
  10. Jetty的JNDI数据源
  11. ubuntu gnome vnc
  12. 网页英文 错位_网页错位原因解决方法
  13. SPSS问卷或量表调查研究需要多少份或要求多大的样本量?【SPSS 062期】
  14. [C++]面向对象部分——类
  15. WIN10 PDF不显示缩略图 解决办法(修复工具下载)
  16. python tkinter grid为什么不能用_Python Tkinter教程之Grid篇
  17. Mathematica实现0.618法(黄金分割法)求最大最小值
  18. 数据结构——循环队列
  19. 大内高手—内存管理器
  20. 如何短时间突击 Java面试?附刷题神器

热门文章

  1. iOS - OC NSSize 尺寸
  2. 修改RHEL7/centos7网卡为eth0
  3. 修改windows系統下xampp中apache端口被其他程式占用的問題
  4. legend3---6、legend3爬坑杂记
  5. 【学习】009 NIO编程
  6. Win7命令终端基础配色指南
  7. mysql UNIX时间戳与日期的相互转换
  8. Javascript中的类实现
  9. 剑桥少儿英语预备级教案(上) unit15 I can draw it.
  10. [开心]很搞笑的贴图,必看(收藏)