NC107617 poj3020 Antenna Placement
问题:
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相关推荐
- 二分图最大匹配(匈牙利算法) POJ 3020 Antenna Placement
题目传送门 1 /* 2 题意:*的点占据后能顺带占据四个方向的一个*,问最少要占据多少个 3 匈牙利算法:按坐标奇偶性把*分为两个集合,那么除了匹配的其中一方是顺带占据外,其他都要占据 4 */ 5 ...
- 【POJ - 3020】Antenna Placement (匈牙利算法,二分图最小边覆盖)
题干: The Global Aerial Research Centre has been allotted the task of building the fifth generation of ...
- Antenna Placement
题目描述: The Global Aerial Research Centre has been allotted the task of building the fifth generation ...
- (匹配 二维建图) Antenna Placement --POJ --3020
链接: http://poj.org/problem?id=3020 http://acm.hust.edu.cn/vjudge/contest/view.action?cid=82834#probl ...
- pku 3020 Antenna Placement
http://poj.org/problem?id=3020 求最小路径覆盖问题 ,对于有向图最小路径覆盖 = 一边的点数 (x集或y集)- 最大匹配 无向图最小路径覆盖 = 一边的点数 (x集或y集 ...
- poj 3020 Antenna Placement(二分图最大匹配)
题意: N行M列的矩阵,每个格子里不是 * 就是 O . * :是一个利益点. O:是一个空白点. 每次可以用一个圈覆盖相邻的两个*.(左右相邻或上下相邻). 问最少需要多少个圈可以覆盖所有的*. 思 ...
- pku3020 Antenna Placement (解法1)
题解:在一个n*m的棋盘上,有一些标志,问最少用多少个1*2的矩形可以把它们全部套住. 可以将每一个标志与其相邻的四个标志建一条边,这样就形成了一个无向图,题目的意思即要求最小的边数.使得所有的点都 ...
- POJ - 3020 Antenna Placement(最小路径覆盖-二分图最大匹配)
题目链接:点击查看 题目大意:给出一个n*m的地图,图中'o'代表空地,'*'代表城市,现在需要给城市装无线网,每个无线网最多可以覆盖相邻的两个城市,问覆盖所有的城市最少需要装多少个无线网 题目分析: ...
- POJ 3020 Antenna Placement
解题思路:求解最大独立集,转而求解最小顶点覆盖->最大流问题 #include <iostream> using namespace std; int t; int father[4 ...
最新文章
- 如何解决弹出窗口固定大小及内容的问题
- 【Matlab】找到矩阵中每个连通域的最小值
- [Office 2010 易宝典]怎样直接将Office文档保存为PDF格式?
- pcb天线和纯铜天线_如何简化天线设计?相控阵波束成形IC来助您
- iPhone 12 Pro最新概念图:五摄相机模组也带下巴
- eigen3.3.4安装笔记
- CoppeliaSim用户手册中文翻译版(一)
- 【bat】批处理中的行,段注释
- 计算机打印共享打印机,教您电脑打印机共享怎么设置
- Redis设置过期时间
- 网络应用 1.计算机网络应用体系结构 2.网络应用通信基本原理 3.域名系统(DNS)4.万维网应用 5.Internet电子邮件 6.FTP 7.P2P应用 8.Socket编程基础
- 计算机网络与Internet发展历史
- 切换分支报错:Untracked Files Prevent Checkout
- 无源晶振和有源晶振作用
- mac电脑安装nvm
- 艰辛的学习之路——错误:Status of node rabbit@LAPTOP-FMKQB7DT ... ** (ArgumentError) argument error (stdlib)
- 想学android 但工作没多少时间学,【共勉】Android学习日志。新年刚过离开学还有时间,加油!...
- Axure源rp文件-线上电竞竞技赛事游戏直播比赛平台web
- 千峰教育2218期2022.10.18日
- JavaScript中 queue(队列)的应用与实现
热门文章
- 你对手机打字一无所知!| 今日最佳
- 资料分享 | python机器学习教程分享来袭
- 机器学习的最佳学习路线原来只有四步
- 如何备份服务器日志到其他服务器_KIWI Syslog日志服务器搭建及配置
- 二维数组各行分别求和_【PyTorch入门】之十分钟看懂二维卷积层的运算、实现及应用...
- postgis数据库优化_国内首个 Serverless 数据库来了,技术架构全揭秘!
- 算法设计与分析——动态规划——最大字段和问题
- 7-26 Windows消息队列 (25 分)(详解+思路+超时解决)
- 解决Java当中 用point 画图时背景颜色变成黑色问题
- 敲黑板!vue3重点!一文了解Composition API新特性:ref、toRef、toRefs