P2825 [HEOI2016/TJOI2016]游戏

分析:

  • 和 P1129 [ZJOI2007] 矩阵游戏 这题差不多,也是行和列分别看作二分图的两个集合

    多了一些 预处理

    若行或列被硬石头隔开了,那再分别加行或列即可

  • 吐槽一下下:wsfwwsfwwsfw , "yr[j]=++toy""yr[j]=++toy""yr[j]=++toy" 我直接复制上一行,把 jjj 变成 iii 了,调错调了 111 小时…

    还对着题解写了另一种预处理的解法(见下文)

#include <bits/stdc++.h>
using namespace std;typedef long long ll;
const int N=1005;vector <int> g[N];
int vis[N],pre[N];
bool dfs(int u,int tag)
{if(vis[u]==tag) return false;vis[u]=tag;for(auto v : g[u]){if(!pre[v] || dfs(pre[v],tag)){pre[v]=u; return true;}}return false;
}
int xr[N], yr[N];
char s[N][N];
int b[N];
signed main()
{ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);int n,m;cin>>n>>m;for(int i=1;i<=n;i++) xr[i]=i;for(int i=1;i<=m;i++) yr[i]=i;for(int i=1;i<=n;i++){for(int j=1;j<=m;j++) cin>>s[i][j];}int tox=n, toy=m;for(int i=1;i<=n;i++){for(int j=1;j<=m;j++) {if(s[i][j]=='*'){g[xr[i]].push_back(yr[j]);}if(s[i][j]=='#'){if(s[i][j+1]=='x' || s[i][j+1]=='*') xr[i]=++tox;if(s[i+1][j]=='x' || s[i+1][j]=='*') yr[j]=++toy;}}}int ans=0;for(int i=1;i<=tox;i++){if(dfs(i,i)) ans++;}cout<<ans<<endl;return 0;
}

(没有多大区别,我是合并的写,还省空间了)

#include <bits/stdc++.h>
using namespace std;typedef long long ll;
const int N=1005;vector <int> g[N];
int vis[N],pre[N];
bool dfs(int u,int tag)
{if(vis[u]==tag) return false;vis[u]=tag;for(auto v : g[u]){if(!pre[v] || dfs(pre[v],tag)){pre[v]=u; return true;}}return false;
}
int row[N][N], col[N][N];
char s[N][N];
int b[N];
signed main()
{ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);int n,m;cin>>n>>m;for(int i=1;i<=n;i++){for(int j=1;j<=m;j++) cin>>s[i][j];}int tox=0, toy=0;for(int i=1;i<=n;i++){for(int j=1;j<=m;j++){if(s[i][j]=='#') continue;if(j==1 || s[i][j-1]=='#') tox++;row[i][j]=tox;}}for(int j=1;j<=m;j++){for(int i=1;i<=n;i++){if(s[i][j]=='#') continue;if(i==1 || s[i-1][j]=='#') toy++;col[i][j]=toy;}}for(int i=1;i<=n;i++){for(int j=1;j<=m;j++){if(s[i][j]=='*'){g[row[i][j]].push_back(col[i][j]);}}}int ans=0;for(int i=1;i<=tox;i++){if(dfs(i,i)) ans++;}cout<<ans<<endl;return 0;
}

P2825 [HEOI2016/TJOI2016]游戏 (二分图最大匹配,预处理)相关推荐

  1. P2825 [HEOI2016/TJOI2016]游戏

    题目描述 详见  P2825 [HEOI2016/TJOI2016]游戏. solution 套路题. 一般思路是行列建点跑二分图最大匹配. 此题中的#会分隔行列,因此我们把每行的极大联通块设为点,列 ...

  2. BZOJ 1854: [Scoi2010]游戏( 二分图最大匹配 )

    匈牙利算法..从1~10000依次找增广路, 找不到就停止, 输出答案. --------------------------------------------------------------- ...

  3. 洛谷P1129: [ZJOI2007]矩阵游戏(二分图最大匹配)

    https://www.luogu.org/problemnew/show/P1129 题目描述 小Q是一个非常聪明的孩子,除了国际象棋,他还很喜欢玩一个电脑益智游戏――矩阵游戏.矩阵游戏在一个N×N ...

  4. HDU - 1528 Card Game Cheater(二分图最大匹配)

    题目链接:点击查看 题目大意:题意有点像求田忌赛马的最优解,大概意思就是现在有两个人,每个人都有n张不同的扑克牌,扑克牌的大小首先以点数来确定,点数相同的情况下以花色来决定,红桃(Heart)> ...

  5. HDU - 5090 Game with Pearls(二分图最大匹配)

    题目链接:点击查看 题目大意:杰瑞和汤姆在玩游戏,游戏规则是:汤姆会拿来N个容器,每个容器内一开始就会包含1~N个小球,现在轮到杰瑞操作了,杰瑞可以选择往每个容器里加入0个或者任意k的倍数个小球,问杰 ...

  6. 棋盘游戏(二分图最大匹配)

    棋盘游戏(二分图最大匹配) 小希和Gardon在玩一个游戏:对一个N*M的棋盘,在格子里放尽量多的一些国际象棋里面的"车",并且使得他们不能互相攻击,这当然很简单,但是Gardon ...

  7. 【网络流24题】解题报告:A、飞行员配对方案问题(最大流求二分图最大匹配)

    A.飞行员配对方案问题 (二分图最大匹配)(最大流)[提高+/省选- ] 题目链接 [问题分析] 二分图最大匹配问题. [建模方法] 在二分图的基础上增加源S和汇T. 1.S向X集合中每个顶点连一条容 ...

  8. 【模板】匈牙利算法 二分图最大匹配题模板

    [任务] 给定一个二分图,用匈牙利算法求这个二分图的最大匹配数. [说明] 求最大匹配,那么我们希望每一个在左边的点都尽量找到右边的一个点和它匹配. 我们一次枚举左边的点x的所有出边指向的点y, 若y ...

  9. 51nod 2006 飞行员配对(二分图最大匹配) 裸匈牙利算法 求二分图最大匹配题

    题目: 题目已经说了是最大二分匹配题, 查了一下最大二分匹配题有两种解法, 匈牙利算法和网络流. 看了一下觉得匈牙利算法更好理解, 然后我照着小红书模板打了一遍就过了. 匈牙利算法:先试着把没用过的左 ...

  10. 2021牛客多校3 - Minimum grid(二分图最大匹配-最大流)

    题目链接:点击查看 题目大意:给出一个 n∗nn*nn∗n 的棋盘,其中有 mmm 个位置是需要填数字的位置,每个位置需要填 [0,k][0,k][0,k] 的数字中的其中一个,可以重复,现在给出每一 ...

最新文章

  1. bootstrap 时间日期日历控件(datetimepicker)附效果图
  2. 量子技术发展的一小步:Google AI推出开源框架Cirq
  3. Rational Purify 使用及分析实例(转载)
  4. Nginx深入了解-基础(一)
  5. [YTU]_2866(结构体---点坐标结构体)
  6. Visualization Document Feb 12 16:42
  7. 2021云栖大会丨首批阿里云计算巢认证合作伙伴获得授牌,阿里云与合作伙伴共筑云上生态
  8. Java 并发工具箱之concurrent包
  9. Java部分A+B正整数A的“DA(为1位整数)部分”定义为由A中所有DA组成的新整数PA。例如:给定A = 3862767,DA = 6,则A的“6部分”PA是66,因为A中有2个6。现给定A、DA
  10. 附录:更多有序集合操作命令
  11. 程序猿bug修改名句
  12. Android系统开发智能机器人,Android智能机器人详解
  13. postek二次开发_POSTEK二次开发接口
  14. 以生活例子说明单线程与多线程
  15. 创建对象、原型、原型链
  16. 笔试题--你准备好了吗
  17. 美国数据科学家:重视非结构化数据分析 走出两大“经典”误区
  18. 亲测Tableau 2018.2 安装与破解
  19. log4j配置文件位置详解
  20. JUC -- 辅助类

热门文章

  1. python图像降采样,【图像处理】——改变图像的大小(降采样重采样)
  2. Error: Packagesfrx7 and VCLDB all Contains DBGrids
  3. DCDC中自举电容的原理小结(一)
  4. PHP中的日期相减函数,在php中有没有日期相减的函数
  5. Sharepoint lookup字段的关联列表查询
  6. [1] UI原型设计工具Pencil Project 学习系列----- 为什么选择
  7. vue3 reactive 对比 react useState 以及 ramda 和 lodash 的取舍问题
  8. 从1G说到5G:构造万物互联的社会
  9. java出现圅_java获取汉字拼音首字母A
  10. 零基础程序员自学编程的6种方法,你知道吗?