4554: [Tjoi2016&Heoi2016]游戏

Time Limit: 20 Sec   Memory Limit: 128 MB
Submit: 266   Solved: 167
[ Submit][ Status][ Discuss]

Description

在2016年,佳缘姐姐喜欢上了一款游戏,叫做泡泡堂。简单的说,这个游戏就是在一张地图上放上若干个炸弹,看
是否能炸到对手,或者躲开对手的炸弹。在玩游戏的过程中,小H想到了这样一个问题:当给定一张地图,在这张
地图上最多能放上多少个炸弹能使得任意两个炸弹之间不会互相炸到。炸弹能炸到的范围是该炸弹所在的一行和一
列,炸弹的威力可以穿透软石头,但是不能穿透硬石头。给定一张n*m的网格地图:其中*代表空地,炸弹的威力可
以穿透,可以在空地上放置一枚炸弹。x代表软石头,炸弹的威力可以穿透,不能在此放置炸弹。#代表硬石头,炸
弹的威力是不能穿透的,不能在此放置炸弹。例如:给出1*4的网格地图*xx*,这个地图上最多只能放置一个炸弹
。给出另一个1*4的网格地图*x#*,这个地图最多能放置两个炸弹。现在小H任意给出一张n*m的网格地图,问你最
多能放置多少炸弹

Input

第一行输入两个正整数n,m,n表示地图的行数,m表示地图的列数。1≤n,m≤50。接下来输入n行m列个字符,代表网
格地图。*的个数不超过n*m个

Output

输出一个整数a,表示最多能放置炸弹的个数

Sample Input

4 4
#∗∗∗
∗#∗∗
∗∗#∗
xxx#

Sample Output

5

二分图最大匹配

如果没有硬石头,是一个很经典的二分图模型,对于每一个空地(x,y),连边x→y,然后计算最大匹配即为答案。

考虑硬石头的影响,相当于将一行拆成了几个互不干扰的部分,所以我们将一行拆分成几个部分,分别对应不同的编号,然后建图算最大匹配。

#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstring>
#include<cstdlib>
#include<algorithm>
#define F(i,j,n) for(int i=j;i<=n;i++)
#define D(i,j,n) for(int i=j;i>=n;i--)
#define ll long long
#define N 55
#define M 3000
using namespace std;
int n,m,nx,ny,ans,cnt;
int x[N][N],y[N][N],head[M],f[M];
char s[N][N];
bool vst[M];
struct edge{int next,to;}e[M];
inline void add_edge(int x,int y)
{e[++cnt]=(edge){head[x],y};head[x]=cnt;
}
bool dfs(int x)
{for(int i=head[x];i;i=e[i].next){int y=e[i].to;if (vst[y]) continue;vst[y]=1;if (!f[y]||dfs(f[y])){f[y]=x;return true;}}return false;
}
int main()
{scanf("%d%d",&n,&m);F(i,1,n) scanf("%s",s[i]+1);F(i,1,n) F(j,1,m) x[i][j]=(j==1||s[i][j]=='#')?++nx:nx;F(j,1,m) F(i,1,n) y[i][j]=(i==1||s[i][j]=='#')?++ny:ny;F(i,1,n) F(j,1,m) if (s[i][j]=='*') add_edge(x[i][j],y[i][j]);F(i,1,nx){memset(vst,0,sizeof(vst));if (dfs(i)) ans++;}printf("%d\n",ans);return 0;
}

bzoj4554【TJOI2016HEOI2016】游戏相关推荐

  1. BZOJ4554 [Tjoi2016Heoi2016]游戏

    假如没有硬石头的话就是对于每个能放炸弹的点(x,y)第x行连第y列,然后跑二分图最大匹配,有硬石头的话把一个炸弹横向和纵向能炸到的地方算一行和一列,然后和没有硬石头一样 #include<ios ...

  2. BZOJ P4554 [Tjoi2016Heoi2016]游戏

    BZOJ P4554 [Tjoi2016&Heoi2016]游戏 题目 Description 在2016年,佳缘姐姐喜欢上了一款游戏,叫做泡泡堂.简单的说,这个游戏就是在一张地图上放上若干个 ...

  3. bzoj4554 [HEOI2016]游戏 二分匹配

    这种限制+求最大方案的题不是网络流就是dp了 dp的话状压可解,但n>20. 首先状态压不下,其次状态的表示是不能通过枚举来记录的,限制条件是有可能精确到块的. 所以就必须考虑网络流,通过决策动 ...

  4. 辣鸡HellPix刷yyb网络流题单(orz yyb)

    题目 评价 状态 [USACO4.2]草地排水Drainage Ditches(最大流)  最大流模板 Accepted HDU 3416 Marriage Match IV(最短路,网络流)  最小 ...

  5. 【Tjoi2016Heoi2016】【BZOJ 4554】【JZOJ 4612】游戏

    Description 在2016年,佳缘姐姐喜欢上了一款游戏,叫做泡泡堂.简单的说,这个游戏就是在一张地图上放上若干个炸弹,看 是否能炸到对手,或者躲开对手的炸弹.在玩游戏的过程中,小H想到了这样一 ...

  6. 伍六七带你学算法 进阶篇-生命游戏

    有趣的算法题–生命游戏 难度-中等 根据 百度百科 ,生命游戏,简称为生命,是英国数学家约翰·何顿·康威在 1970 年发明的细胞自动机. 想要体验生命游戏的小伙伴可以到这里-->生命游戏 进入 ...

  7. 自制青蛙跳台阶小游戏~

    青蛙跳台阶小游戏 1.概念(concept)文档 楔子(Setting):千百年来,人们在贬低别人时,常用井底之蛙来描述那个人,但这却让青蛙不开心了,于是青蛙决定跳出井底,为自己讨一个公道. 玩法(G ...

  8. 用Construct 2制作入门小游戏~

    今天在软导课上了解到了Construct 2这个神器,本零基础菜鸟决定尝试做一个简单的小游戏(实际上是入门的教程啊= = 首先呢,肯定是到官网下载软件啊,点击我下载~ 等安装完毕后我便按照新手教程开始 ...

  9. Intel GPU实现游戏与数据中心

    Intel GPU实现游戏与数据中心 在Intel Architecture Day上,Intel谈到了面向游戏玩家的Xe-HPG架构Alchemist GPU以及面向数据中心的Xe-HPC架构GPU ...

最新文章

  1. 数据结构与算法——线性结构——线性表及其表示
  2. 全部与精简切换显示jQuery实例教程
  3. linux安装setup.py程序
  4. 马云不会因支付宝事件走下神坛
  5. Java集合---Arrays类源码解析
  6. 编程随想 关系图_IT什么岗位比较好找工作?一张金字塔图就能明白
  7. c语言sleep函数_做游戏,学C语言,小球碰撞游戏,菜鸡者从黑窗口到图形化编程...
  8. ajax 跨域 java_java+jQueryd的ajax跨域方法
  9. flash电脑安装包_一百余款电脑软件及安装方式,忍不住收藏起来
  10. linux系统打开m3u8文件,Linux下载m3u8流视频并合并ts文件
  11. HDFS之存储优化纠删码原理、纠删码案例实操 、异构存储(冷热数据分离)
  12. 无法复制文件到远程桌面的解决办法
  13. linux smtp ip伪造,邮箱伪造之搭建匿名SMTP服务器
  14. Winfrom控件的使用
  15. form-making爬坑笔记(jeecg项目替换表单设计器)
  16. 门禁卡怎么弄到手机上,手机变成门禁卡,手把手超详细(建议收藏)
  17. 使用scp传输文件给linux服务器,出现Permission denied(publickey) 的解决办法
  18. 静态文档,动态文档和活动文档
  19. JVM3:实战:内存分配与回收策略
  20. 详解AUTOSAR:AUTOSAR方法论(理论篇—3)

热门文章

  1. linux程序打印cr3寄存器,CR0,CR3寄存器
  2. 详解pytorch实现猫狗识别98%附代码
  3. Sitecore 实用的一些方法
  4. Sitecore Experience Platform Pre-Auth RCE 复现【CVE-2021-42237】
  5. Scikit-learn快速入门教程和实例(一)
  6. PDF如何添加墨绿背景
  7. MBA 论文 物联网,加快产业结构转型升级
  8. Python—linux基础
  9. WiFi也能检测人体3D动作?误差低至2.4厘米
  10. Ubuntu中常见特殊符号