问题:

n * m的矩阵,有一些障碍点,用12的骨牌覆盖所有非障碍点 (12骨牌可重叠,骨牌可越界,骨牌可延伸到障碍点) 问最少需要 多少个。

题解:


• 尽量用一个骨牌覆盖两个格子,覆盖不了了再重叠使用骨牌
• 用和上一个题一样的方式求一个最大匹配,那么就有(2 * 最大匹配)个点已经被覆盖了
• 剩下了(总格子数-2 * 最大匹配)个点,每个点都需要一个骨牌
• 所以需要总格子数-2 * 最大匹配+最大匹配 = 总格子-最大匹配个骨牌
• 一个结论:
最小路径覆盖 (选最少的边覆盖掉所有的点)= 总顶点数-最大匹配数
(目前代码wa,但是还没找到哪里错了,基本思路是对的)

代码:

#include<iostream>
#include<cstring>
using namespace std;const int maxn=800;
int a[maxn][maxn];
int n,m;
int vis[maxn];
int link[maxn];
int lx,ly;
char c[maxn][maxn];
int maxmatch(int x)
{for(int i=1;i<=n*m;i++){    //if((i+j)%2==1){//      if(i%2==1)continue;int y=i;if(!a[x][y]||vis[y])continue;vis[y]=1;if(link[y]==0||maxmatch(link[y])){link[y]=x;return 1;}}}return 0;
}
int main()
{int t;cin>>t;while(t--){cin>>n>>m;memset(link,0,sizeof(link));memset(a,0,sizeof(a));memset(c,'0',sizeof(c));char ch=getchar();int tot=0;for(int i=1;i<=n;i++){for(int j=1;j<=m;j++){cin>>c[i][j];}char ch=getchar();}for(int i=1;i<=n;i++){for(int j=1;j<=m;j++){if(c[i][j]=='*'){if(c[i-1][j]=='*')a[(i-2)*m+j][(i-1)*m+j]=a[(i-1)*m+j][(i-2)*m+j]=1;if(c[i+1][j]=='*')a[(i)*m+j][(i-1)*m+j]=a[(i-1)*j+j][(i)*m+j]=1;if(c[i][j-1]=='*')a[(i-1)*m+j-1][(i-1)*m+j]=a[(i-1)*j+j][(i-1)*m+j-1]=1;if(c[i][j+1]=='*')a[(i-1)*m+j+1][(i-1)*m+j]=a[(i-1)*j+j][(i-1)*m+j+1]=1;tot++;}}} int sum=0;for(int i=1;i<=n;i++){for(int j=1;j<=m;j++){int x=(i-1)*m+j;if((i+j)%2==0&&c[i][j]=='*'){memset(vis,0,sizeof(vis));sum+=maxmatch(x);}// if(i%2==0)continue;}}//   printf("tot=%d\n",tot);//    printf("sum=%d\n",sum);printf("%d\n",tot-sum);}return 0;
}

NC107617 poj3020 Antenna Placement相关推荐

  1. 二分图最大匹配(匈牙利算法) POJ 3020 Antenna Placement

    题目传送门 1 /* 2 题意:*的点占据后能顺带占据四个方向的一个*,问最少要占据多少个 3 匈牙利算法:按坐标奇偶性把*分为两个集合,那么除了匹配的其中一方是顺带占据外,其他都要占据 4 */ 5 ...

  2. 【POJ - 3020】Antenna Placement (匈牙利算法,二分图最小边覆盖)

    题干: The Global Aerial Research Centre has been allotted the task of building the fifth generation of ...

  3. Antenna Placement

    题目描述: The Global Aerial Research Centre has been allotted the task of building the fifth generation ...

  4. (匹配 二维建图) Antenna Placement --POJ --3020

    链接: http://poj.org/problem?id=3020 http://acm.hust.edu.cn/vjudge/contest/view.action?cid=82834#probl ...

  5. pku 3020 Antenna Placement

    http://poj.org/problem?id=3020 求最小路径覆盖问题 ,对于有向图最小路径覆盖 = 一边的点数 (x集或y集)- 最大匹配 无向图最小路径覆盖 = 一边的点数 (x集或y集 ...

  6. poj 3020 Antenna Placement(二分图最大匹配)

    题意: N行M列的矩阵,每个格子里不是 * 就是 O . * :是一个利益点. O:是一个空白点. 每次可以用一个圈覆盖相邻的两个*.(左右相邻或上下相邻). 问最少需要多少个圈可以覆盖所有的*. 思 ...

  7. pku3020 Antenna Placement (解法1)

    题解:在一个n*m的棋盘上,有一些标志,问最少用多少个1*2的矩形可以把它们全部套住.  可以将每一个标志与其相邻的四个标志建一条边,这样就形成了一个无向图,题目的意思即要求最小的边数.使得所有的点都 ...

  8. POJ - 3020 Antenna Placement(最小路径覆盖-二分图最大匹配)

    题目链接:点击查看 题目大意:给出一个n*m的地图,图中'o'代表空地,'*'代表城市,现在需要给城市装无线网,每个无线网最多可以覆盖相邻的两个城市,问覆盖所有的城市最少需要装多少个无线网 题目分析: ...

  9. POJ 3020 Antenna Placement

    解题思路:求解最大独立集,转而求解最小顶点覆盖->最大流问题 #include <iostream> using namespace std; int t; int father[4 ...

最新文章

  1. 如何解决弹出窗口固定大小及内容的问题
  2. 【Matlab】找到矩阵中每个连通域的最小值
  3. [Office 2010 易宝典]怎样直接将Office文档保存为PDF格式?
  4. pcb天线和纯铜天线_如何简化天线设计?相控阵波束成形IC来助您
  5. iPhone 12 Pro最新概念图:五摄相机模组也带下巴
  6. eigen3.3.4安装笔记
  7. CoppeliaSim用户手册中文翻译版(一)
  8. 【bat】批处理中的行,段注释
  9. 计算机打印共享打印机,教您电脑打印机共享怎么设置
  10. Redis设置过期时间
  11. 网络应用 1.计算机网络应用体系结构 2.网络应用通信基本原理 3.域名系统(DNS)4.万维网应用 5.Internet电子邮件 6.FTP 7.P2P应用 8.Socket编程基础
  12. 计算机网络与Internet发展历史
  13. 切换分支报错:Untracked Files Prevent Checkout
  14. 无源晶振和有源晶振作用
  15. mac电脑安装nvm
  16. 艰辛的学习之路——错误:Status of node rabbit@LAPTOP-FMKQB7DT ... ** (ArgumentError) argument error (stdlib)
  17. 想学android 但工作没多少时间学,【共勉】Android学习日志。新年刚过离开学还有时间,加油!...
  18. Axure源rp文件-线上电竞竞技赛事游戏直播比赛平台web
  19. 千峰教育2218期2022.10.18日
  20. JavaScript中 queue(队列)的应用与实现

热门文章

  1. 你对手机打字一无所知!| 今日最佳
  2. 资料分享 | python机器学习教程分享来袭
  3. 机器学习的最佳学习路线原来只有四步
  4. 如何备份服务器日志到其他服务器_KIWI Syslog日志服务器搭建及配置
  5. 二维数组各行分别求和_【PyTorch入门】之十分钟看懂二维卷积层的运算、实现及应用...
  6. postgis数据库优化_国内首个 Serverless 数据库来了,技术架构全揭秘!
  7. 算法设计与分析——动态规划——最大字段和问题
  8. 7-26 Windows消息队列 (25 分)(详解+思路+超时解决)
  9. 解决Java当中 用point 画图时背景颜色变成黑色问题
  10. 敲黑板!vue3重点!一文了解Composition API新特性:ref、toRef、toRefs