引爆炸弹

在一个 n×m的方格地图上,某些方格上放置着炸弹。手动引爆一个炸弹以后,炸弹会把炸弹所在的行和列上的所有炸弹引爆,被引爆的炸弹又能引爆其他炸弹,这样连锁下去。

现在为了引爆地图上的所有炸弹,需要手动引爆其中一些炸弹,为了把危险程度降到最低,请算出最少手动引爆多少个炸弹可以把地图上的所有炸弹引爆。

输入格式

第一行输两个整数n,m,用空格隔开。

接下来n行,每行输入一个长度为m的字符串,表示地图信息。0表示没有炸弹,1表示炸弹。

数据约定:

对于 60%的数据:1≤n,m≤100;

对于 100%的数据:1≤n,m≤1000;

数据量比较大,不建议用cin输入。

输出格式

输出一个整数,表示最少需要手动引爆的炸弹数。

样例输入

  1. 5 5
  2. 00010
  3. 00010
  4. 01001
  5. 10001
  6. 01000

样例输出

  1. 2

样例的方法如下:先引手动引爆一个炸弹,红色的手动引爆,绿色的是间接引爆。

然后再手动引爆一个炸弹:

因此最少需要手动引爆两枚炸弹。

贴大佬代码:

  1. #include<iostream>
  2. #include<cstdio>
  3. #include<cmath>
  4. #include<cstring>
  5. #include<algorithm>
  6. #include<stack>
  7. #include<queue>
  8. #include<map>
  9. #include<set>
  10. #include<vector>
  11. #include<cstdlib>
  12. #include<string>
  13. #define eps 0.000000001
  14. typedef long long ll;
  15. typedef unsigned long long LL;
  16. using namespace std;
  17. const int N=+;
  18. int m,n;
  19. int t;
  20. int vis[N];
  21. struct node{
  22. int x,y;
  23. }a[N];
  24. int parent[N];
  25. void init(){
  26. memset(vis,,sizeof(vis));
  27. for(int i=;i<=N;i++)parent[i]=i;
  28. }
  29. int find(int x){
  30. int r=x;
  31. while(r!=parent[r])r=parent[r];
  32. int i=x;
  33. int j;
  34. while(parent[i]!=r){
  35. j=parent[i];
  36. parent[i]=r;
  37. i=j;
  38. }
  39. return r;
  40. }
  41. void Union(int x,int y){
  42. x=find(x);
  43. y=find(y);
  44. if(x!=y)parent[x]=y;
  45. }
  46. void DFS(int x){
  47. vis[x]=;
  48. for(int i=;i<t;i++){
  49. if(vis[i]==&&(a[i].x==a[x].x||a[i].y==a[x].y)){
  50. Union(i,x);DFS(i);
  51. }
  52. }
  53. }
  54. int main(){
  55. char c;
  56. init();
  57. scanf("%d%d",&m,&n);
  58. getchar();
  59. t=;
  60. for(int i=;i<=m;i++)
  61. for(int j=;j<=n;j++){
  62. cin>>c;
  63. if(c==''){a[t].x=i;a[t].y=j;t++;}
  64. }
  65. for(int i=;i<t;i++)DFS(i);
  66. int ans=;
  67. for(int i=;i<t;i++){
  68. if(parent[i]==i)ans++;
  69. }
  70. cout<<ans<<endl;
  71. }

蓝桥杯模拟赛-引爆炸弹-DFS+并查集的更多相关文章

  1. 蓝桥杯模拟赛 引爆炸弹-并查集+DFS

    引爆炸弹 在一个 n×m的方格地图上,某些方格上放置着炸弹.手动引爆一个炸弹以后,炸弹会把炸弹所在的行和列上的所有炸弹引爆,被引爆的炸弹又能引爆其他炸弹,这样连锁下去. 现在为了引爆地图上的所有炸弹, ...

  2. 计蒜客蓝桥杯模拟赛 后缀字符串:STL_map+贪心

    问题描述 一天蒜头君得到 n 个字符串 si​,每个字符串的长度都不超过 10. 蒜头君在想,在这 n 个字符串中,以 si​ 为后缀的字符串有多少个呢? 输入格式 第一行输入一个整数 n. 接下来  ...

  3. 蓝桥杯 试题 历届试题 发现环 并查集+dfs

    问题描述 小明的实验室有N台电脑,编号1~N.原本这N台电脑之间有N-1条数据链接相连,恰好构成一个树形网络.在树形网络上,任意两台电脑之间有唯一的路径相连. 不过在最近一次维护网络时,管理员误操作使 ...

  4. 计蒜客蓝桥杯模拟赛五J. 程序设计:放置守卫

    在一张 n 行 m 列的方格地图上放置一些守卫,每个守卫能守护上.左.右三个方向上相邻的方格和自己所在的方格.如下图,红色的方格放置守卫,绿色的方格为该守卫守护的区域. 现在要求在地图上放置若干个守卫 ...

  5. BFS 搜索 蓝桥杯模拟赛

    题目链接:https://nanti.jisuanke.com/t/36117 这个题目想不到用广搜来做,一直在想深搜. 广搜的思路呢,是把最外圈不是黑色(不是0)的数 的位置 i 和 j 进队,赋值 ...

  6. noip模拟赛 动态仙人掌(并查集,贪心)

    思路: 贪心+并查集 因为45‘,所以可以很方便的算出每个仙人掌的最晚起跳(左端点) 右端点自然也能出来 先按左端点排序 如果他右面的和他相交,就更新 用并查集维护这个更新的关系 更新的同时维护高就好 ...

  7. 52-2018 蓝桥杯省赛 B 组模拟赛(一)java

    最近蒜头君喜欢上了U型数字,所谓U型数字,就是这个数字的每一位先严格单调递减,后严格单调递增.比如 212212 就是一个U型数字,但是 333333, 9898, 567567, 313133131 ...

  8. 第九届蓝桥杯国赛+第二天的第11届acm省赛的总结

    第九届蓝桥杯国赛+第二天的第11届acm省赛的总结 25号坐的去北京的火车,10个小时的火车,然后挤了快两个小时的地铁,最终达到了中国矿业大学旁边的订的房间.12个小时很难受,晕车症状有点严重,吃了快 ...

  9. Python解答蓝桥杯省赛真题之从入门到真题(二刷题目一直更新)

    蓝桥刷题 原文链接: https://github.com/libo-sober/LanQiaoCup Python解答蓝桥杯省赛真题之从入门到真题 不同字串 """ 一 ...

随机推荐

  1. 前端开发必备之MDN文档

    想下载MDN文档的看前面的内容就可以了. HTML 源码下载 MDN官方下载地址:https://developer.mozilla.org/media/developer.mozilla.org.t ...

  2. table常用的属性以及用法

    <table><table/>先定义一个表格这个就没得讲了,<caption>表示这个表格的标题 <table border="6"> ...

  3. bzoj 2733: [HNOI2012]永无乡

    Description 永无乡包含 n 座岛,编号从 1 到 n,每座岛都有自己的独一无二的重要度,按照重要度可 以将这 n 座岛排名,名次用 1 到 n 来表示.某些岛之间由巨大的桥连接,通过桥可以 ...

  4. HTML5 矩阵变换

    transforms 使用图形上下文对象的transforms方法修改变换矩阵,该方法的定义如下: context.transform(m11,m12,m21,m22,dx,dy); 其中m11,m1 ...

  5. iOS音频采集过程中的音效实现

    1.背景 在移动直播中, 声音是主播和观众互动的重要途径之一, 为了丰富直播的内容,大家都会想要在声音上做一些文章, 在采集录音的基础上玩一些花样. 比如演唱类的直播间中, 主播伴随着背景音乐演唱. ...

  6. jquery中attr和prop的区别分析

    这篇文章主要介绍了jquery中attr和prop的区别分析的相关资料,需要的朋友可以参考下 在高版本的jquery引入prop方法后,什么时候该用prop?什么时候用attr?它们两个之间有什么区别 ...

  7. SQL Server(解决问题)已成功与服务器建立连接,但是在登录过程中发生错误。(provider: Shared Memory Provider, error:0 - 管道的另一端上无任何进程。

    http://blog.csdn.net/github_35160620/article/details/52676416 如果你在使用新创建的 SQL Server 用户名和密码 对数据库进行连接的 ...

  8. java 集合类基础问题汇总

     1.Java集合类框架的基本接口有哪些? 参考答案 集合类接口指定了一组叫做元素的对象.集合类接口的每一种具体的实现类都可以选择以它自己的方式对元素进行保存和排序.有的集合类允许重复的键,有些不允许 ...

  9. Node.js 蚕食计划(二)—— 使用 http 模块搭建 Web 服务器

    Node.js 开发的目的就是为了用 JavaScript 编写 Web 服务器程序 这次就来介绍用 http 模块搭建服务器 一.项目构建 每个 Node 程序都可以看作一个模块,而每个模块都应该有 ...

  10. NOTIC: Invalid argument supplied for foreach()

    NOTIC: [2] Invalid argument supplied for foreach() Warning: Invalid argument supplied for foreach() ...