链接:https://ac.nowcoder.com/acm/contest/216/D
来源:牛客网

题目描述

r神在和小b比赛玩一个名为“消消乐”的游戏,在一个n*m的棋盘上,一些棋子分布在格点上,游戏玩家有一个名为超蓝光波的武器,可以消除一行或者一列的所有棋子,使用超蓝光波需要耗费一点能量,消除完所有的棋子之后,花费能量越少得分越高。

r神为了超过排名第一的小b,夺得荣誉称号“天下第一”,他需要寻求你的帮助,他希望知道最少需要使用多少次“超蓝光波”,以及在哪行、哪列使用。

输入描述:

第一行两个正整数n(n<=2000),m(m<=2000);接下来n行,每行m个字符,表示棋盘,其中“.”表示该处没有棋子,“*”表示该处有棋子,棋子个数<=100000

输出描述:

第一行输出一个正整数,表示最少需要使用的“超蓝光波”次数第二行N+1个正整数,第一个数为N,表示需要消掉的行数,从小到大输出每个需要消除的行号第三行M+1个正整数,第一个数为M,表示需要消掉的列数,从小到大输出每个需要删除的列号如果有多种情况,任意输出一种即可。

输入

3 4
.*..
**.*
.*..

输出

2
1 2
1 2

很容易发现这题就是个二分匹配

如果(x, y)上有棋子,那么第x行向第y列连一条边

求出最小点覆盖就是答案

然而这题还需要输出一种最小点覆盖方案

二分匹配时一些变量如下

  • visx[p]/visy[p]:左边/右边第p个点是否被标记
  • L[p]/R[p]:最大匹配下,左边/右边第p个点连接了对面的哪个点(如果这个点没有与任何点相连,为-1)

步骤如下:

  1. 先进行一次二分匹配
  2. 清空visx[]和visy[],并对左边所有没有匹配成功的点,再次尝试匹配
  3. 这个时候所有visx[]为0,visy[]不为0的点即最小点覆盖中的点
#include<stdio.h>
#include<string.h>
#include<vector>
using namespace std;
char str[2005];
int k, n, m, visx[2005], visy[2005], L[2005], R[2005];
vector<int> G[2005], F;
int Sech(int x)
{int i, v;visx[x] = 1;for(i=0;i<G[x].size();i++){v = G[x][i];if(visy[v]==0){visy[v] = 1;if(R[v]==-1 || Sech(R[v])){R[v] = x, L[x] = v;return 1;}}}return 0;
}
int main(void)
{int i, j, ans;scanf("%d%d", &n, &m);for(i=1;i<=n;i++){scanf("%s", str+1);for(j=1;j<=m;j++){if(str[j]=='*')G[i].push_back(j);}}ans = 0;memset(L, -1, sizeof(L));memset(R, -1, sizeof(R));for(i=1;i<=n;i++){memset(visy, 0, sizeof(visy));if(Sech(i))ans++;}memset(visx, 0, sizeof(visx));memset(visy, 0, sizeof(visy));printf("%d\n", ans);for(i=1;i<=n;i++){if(L[i]==-1)Sech(i);}for(i=1;i<=n;i++){if(visx[i]==0)F.push_back(i);}printf("%d", F.size());for(i=0;i<F.size();i++)printf(" %d", F[i]);puts("");F.clear();for(i=1;i<=m;i++){if(visy[i])F.push_back(i);}printf("%d", F.size());for(i=0;i<F.size();i++)printf(" %d", F[i]);puts("");return 0;
}

牛客练习赛30: D. 消消乐(二分匹配+输出最小点覆盖)相关推荐

  1. 牛客练习赛30: E. 国政议事(二分匹配)

    链接:https://ac.nowcoder.com/acm/contest/216/E 来源:牛客网 题目描述 对于任何一个高速发展的发展中国家而言,一个高效的领导小组是不可或缺的. 现在我们知道k ...

  2. E-牛牛小数点_牛客练习赛89(数学)

    E-牛牛小数点_牛客练习赛89 (nowcoder.com) 题目描述 牛牛想和点点交朋友, 于是点点给了牛牛一个问题. 定义关于小数 xxx 的函数 f(x)f(x)f(x), 表示 xxx 中两个 ...

  3. 2021牛客练习赛90

    2021牛客练习赛90 B.寒冬信使 C.盾与战锤 B.寒冬信使 题目链接:https://ac.nowcoder.com/acm/contest/11180/B code: #include< ...

  4. 牛客练习赛81 E. 小 Q 与函数求和 1( “简单莫比乌斯反演” ,欧拉函数性质)

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 牛客练习赛81 E. 小 Q 与函数求和 1( "简单莫比乌斯反演" ) Prob ...

  5. 解题报告(一)C、(牛客练习赛41 F)简单数学题(数论 + FWT)(3.5)

    繁凡出品的全新系列:解题报告系列 -- 超高质量算法题单,配套我写的超高质量题解和代码,题目难度不一定按照题号排序,我会在每道题后面加上题目难度指数(1∼51 \sim 51∼5),以模板题难度 11 ...

  6. 牛客练习赛34 E little w and Digital Root(数位dp)

    title: 牛客练习赛34 E little w and Digital Root(数位dp) date: 2018-12-17 22:38:37 tags: 数位dp categories:ACM ...

  7. 牛客练习赛34 - C little w and Segment Coverage(思维、树状数组)

    title: 牛客练习赛34 - C little w and Segment Coverage(思维.树状数组) date: 2018-12-15 16:36:55 tags: [树状数组,思维] ...

  8. 牛客练习赛52 | C | [烹饪] (DP,裴蜀定理,gcd)

    牛客练习赛52 C 烹饪 链接:https://ac.nowcoder.com/acm/contest/1084/C来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 327 ...

  9. 牛客练习赛73 D 离别(线段树+右端点排序离线查询)

    牛客练习赛73 D 离别 思路: 对于每一个固定的右端点i,我们都找到一个区间(l,r)使得区间中的点为左端点时 里面最大的的种数为k. 这个可以用队列或者vector来维护. 然后我们对于q个查询, ...

最新文章

  1. 蓝桥杯第九届决赛-交换次数-java
  2. java异常类型和基本处理原则_Java异常控制机制和异常处理原则
  3. Samba共享后不能访问,或者看不到文件,是selinux惹的祸
  4. 轻松看懂java设计模式简单工厂模式
  5. 鬼泣4计算机丢失xinput,Win7系统运行游戏报错“计算机丢失XINPUT1-3.dll”
  6. ASP.NET Core分布式项目实战(第三方ClientCredential模式调用)--学习笔记
  7. Quartus 中快速分配器件管脚
  8. 团队协作之文档管理-ShowDoc本地化安装使用
  9. delphi 获取桌面路径
  10. 华为P30系列高清渲染图曝光:后置三摄拍照要上天
  11. SVN下载,安装,配置,常用操作 svn教程
  12. 数据库设计—— 使用Java实现数据库编程
  13. 程序识别验证码图片(一)
  14. java-IO流(2)-字节流和字符流的介绍
  15. JavaWeb基础5——HTTP,TomcatServlet
  16. 计算机基础_程序是怎样跑起来的_04_有棱有角的内存
  17. PC微信最新版HOOK接口3.7.6.44
  18. IBM蓝色基因超级计算机运行Plan9操作系统
  19. 中文医疗NLP榜单-CBLUE介绍
  20. Win8.1+VS2013+WDK8.1+VirtualBox or VMware 驱动开发环境配置

热门文章

  1. python没基础能自学吗-没学过编程可以自学python吗
  2. 学python能干什么工作-什么是Python?学完之后能做哪些工作?
  3. python中文视频教程-鱼C零基础入门 Python中文视频教程
  4. python必背代码-Python小白必备的8个最常用的内置函数(推荐)
  5. 长虹智慧厨房解决方案,让你AI上智慧家居生活
  6. SIMIS计算机联锁系统,steam游戏sim
  7. 订单失效怎么做的_虾皮Shopee新加坡电商做什么产品好呢?订单少得可怜怎么办呢...
  8. 计算机网络重点知识总结 谢希仁版,计算机网络谢希仁版网络层知识点总结
  9. vue可缓存的单页面多标签页
  10. create-react-app 后需要npm run eject