题目描述

详见  P2825 [HEOI2016/TJOI2016]游戏。

solution

套路题。

一般思路是行列建点跑二分图最大匹配。

此题中的#会分隔行列,因此我们把每行的极大联通块设为点,列同理建点。

再对于每个*对应的行的极大联通块与列的最大联通块编号连边,跑最大匹配即可。

#include<bits/stdc++.h>
using namespace std;
const int MAXN=55;
vector<int> e[MAXN*MAXN];
bool vis[MAXN*MAXN];
char st[MAXN];
int flag[MAXN][MAXN];
int color1[MAXN][MAXN],color2[MAXN][MAXN],X[MAXN*MAXN],Y[MAXN*MAXN];
inline int read()
{int f=1,x=0; char c=getchar();while (c<'0'||c>'9') { if (c=='-') f=-1; c=getchar(); }while (c>='0'&&c<='9') { x=(x<<3)+(x<<1)+(c^48); c=getchar(); }return x*f;
}
bool check(int u)
{for (int i=0;i<e[u].size();i++){int to=e[u][i];if (vis[to]) continue;vis[to]=1;if (X[to]==-1||check(X[to])) { X[to]=u,Y[u]=to; return 1; }}return 0;
}
int main()
{int n=read(),m=read(),colornum=1,num=0;for (int i=1;i<=n;i++){scanf("%s",st);for (int j=0;j<m;j++){if (st[j]=='*') flag[i][j+1]=0;if (st[j]=='x') flag[i][j+1]=1;if (st[j]=='#') flag[i][j+1]=2;}}for (int i=1;i<=n;i++){if (num>0) colornum++,num=0;for (int j=1;j<=m;j++)if (flag[i][j]==2&&num>0) num=0,colornum++; else if (flag[i][j]==2) color1[i][j]=0;else num++,color1[i][j]=colornum;}for (int i=1;i<=m;i++){if (num>0) colornum++,num=0;for (int j=1;j<=n;j++)if (flag[j][i]==2&&num>0) num=0,colornum++;else if (flag[j][i]==2) color2[j][i]=0;else num++,color2[j][i]=colornum;}for (int i=1;i<=n;i++)for (int j=1;j<=m;j++)if (flag[i][j]==0) e[color1[i][j]].push_back(color2[i][j]);/*for (int i=1;i<=n;i++){for (int j=1;j<=m;j++) cout<<setw(3)<<color1[i][j];cout<<endl;}cout<<endl;for (int i=1;i<=n;i++){for (int j=1;j<=m;j++) cout<<setw(3)<<color2[i][j];cout<<endl;}*/int ans=0;for (int i=1;i<=colornum;i++) X[i]=Y[i]=-1;for (int i=1;i<=colornum;i++) {memset(vis,0,sizeof vis);ans+=check(i);}printf("%d\n",ans);return 0;
}

P2825 [HEOI2016/TJOI2016]游戏相关推荐

  1. [HEOI2016/TJOI2016]求和(第二类斯特林数)

    题目 [HEOI2016/TJOI2016]求和 关于斯特林数与反演的更多姿势\(\Longrightarrow\)点这里 做法 \[\begin{aligned}\\ Ans&=\sum\l ...

  2. 主席树 + 后缀数组求LCP + 二分套二分 ---- P4094 [HEOI2016/TJOI2016]字符串

    题目链接 题目大意: 解题思路: 设我们的答案为midmidmid(注意这里有坑是[a,b][a,b][a,b]的所有子串和[c,d][c,d][c,d]这个子串的最长lcplcplcp),那么我们会 ...

  3. 线段树分裂与合并 ----- P2824 [HEOI2016/TJOI2016]排序 [线段树分裂合并 OR 01序列排序+二分线段树]

    题目链接 题目大意: 对一个序列,每次按照升序或者降序排序序列某一段,问你最后的序列是什么? 解法1:二分+线段树 首先我们知道对一个01序列进行排序是很快的!我们只要知道里面有多少个1和多少个0,那 ...

  4. HEOI2016/TJOI2016 字符串问题

    题目链接:戳我 非常不好意思,因为想要排版,所以今天先只把代码贴出来,明天补题解. 40pts暴力:直接暴力匹配 #include<iostream>#include<cstring ...

  5. BZOJ4555[HEOI2016/TJOI2016]求和

    题目链接 洛谷 BZOJ 前置知识 第二类斯特林数 含义 \(S_n^m\)表示将\(n\)个互不相同的元素划分为\(m\)个非空集合的方案数 递推式 \[ S_n^m = S_{n - 1}^{m ...

  6. [HEOI2016/TJOI2016]排序

    题目描述 在2016年,佳媛姐姐喜欢上了数字序列.因而他经常研究关于序列的一些奇奇怪怪的问题,现在他在研究一个难题,需要你来帮助他.这个难题是这样子的:给出一个1到n的全排列,现在对这个全排列序列进行 ...

  7. [HEOI2016/TJOI2016]求和

    https://www.zybuluo.com/ysner/note/1288083 题面 求\[\sum_{i=0}^n\sum_{j=0}^iS(i,j)*2^j*j!\] \(n\leq10^5 ...

  8. BZOJ 4555 Luogu P4091 [HEOI2016/TJOI2016]求和 (第二类斯特林数)

    题目链接 (lugou) https://www.luogu.org/problem/P4091 (bzoj) https://www.lydsy.com/JudgeOnline/problem.ph ...

  9. BZOJ.4552.[HEOI2016/TJOI2016]排序(线段树合并/二分 线段树)

    题目链接 对于序列上每一段连续区间的数我们都可以动态开点建一棵值域线段树.初始时就是\(n\)棵. 对于每次操作,我们可以将\([l,r]\)的数分别从之前它所属的若干段区间中分离出来,合并. 对于升 ...

最新文章

  1. springboot rabbitmq direct exchange和topic exchange 写法上关于路由键的区别
  2. 洛谷.4252.[NOI2006]聪明的导游(提答 直径 随机化)
  3. wordpress发布时间 the_title()详细参数
  4. Discuz! X3.2新增管理员无法登录后台的解决办法
  5. 想起linux关机命令
  6. 牛客java面试题总结版(二)
  7. Android Studio下项目构建的Gradle配置及打包应用变体
  8. 图标和文字跟着div比例放大缩小_电脑桌面图标变大了?与这3个原因有关,修改后可恢复...
  9. 玩! 框架+ Google Guice
  10. python中pandas计数_python – Pandas:根据条件计数进行分组
  11. python的sorted排序具体解释
  12. 链表 之 字典树(讲解+模板)的构建
  13. 研究下抓站开源项目simplecd的源代码吧
  14. 遇到NOD32更新时提示“用户名和密码无效”解决办法
  15. N76E003的TM1620B驱动
  16. 汇率换算(android安卓版)
  17. 关于SIM800C 2G通信模块的电路设计上需要注意的地方
  18. 小米随星借(原小米贷款)提升服务水平,帮助用户解决用款难问题
  19. Python标准库第三方库
  20. 比对布线标准,推进行业发展

热门文章

  1. 一人之力也能抬起一辆大型箱车?
  2. 有朋友问我为什么这么帅
  3. 百度内部培训PPT流出:数据分析的道与术
  4. linux文件读保护,Linux Rootkit实现文件保护
  5. mysql数据连接查询_mysql数据库 连接查询
  6. java hashmap实例,关于java中的HashMap的实例操作
  7. php 二维sort,php 二维数组排序
  8. linux mysql安装教程 方大帝_discuz论坛出现Can not connect to MySQL server错误的解决方法...
  9. 技能高考本科计算机类,技能高考多少分上本科
  10. centos7python命令_02.将python3作为centos7的默认python命令