解题思路:二分图的最大匹配,但这题是所有点都遍历一遍,所以答案/2;

代码:

  1. #include<iostream>
  2. #include<algorithm>
  3. #include<cstdio>
  4. #include<cstring>
  5. #define maxn 100500
  6. using namespace std;
  7. struct Edge
  8. {
  9. int next;
  10. int to;
  11. int fa;
  12. int w;
  13. }edge[maxn];
  14. char s[60][60];
  15. int t,n;
  16. int cnt;
  17. int visit[maxn];
  18. int head[maxn];
  19. int match[maxn];
  20. void add(int u,int v)
  21. {
  22. edge[cnt].next=head[u];
  23. edge[cnt].to=v;
  24. head[u]=cnt++;
  25. }
  26. bool dfs(int u)
  27. {
  28. for(int i=head[u];i!=-1;i=edge[i].next)
  29. {
  30. int v=edge[i].to;
  31. if(!visit[v])
  32. {
  33. visit[v]=1;
  34. if(match[v]==-1||dfs(match[v]))
  35. {
  36. match[v]=u;return 1;
  37. }
  38.  
  39. }
  40. }
  41. return 0;
  42. }
  43. int main()
  44. {
  45. int tt=0;
  46. cin>>t;
  47. while(t--)
  48. {
  49. tt++;
  50. memset(head,-1,sizeof(head));
  51. cnt=0;
  52. cin>>n;
  53. for(int i=1;i<=n;i++)
  54. for(int j=1;j<=n;j++)
  55. cin>>s[i][j];
  56. for(int i=1;i<=n;i++)
  57. {
  58. for(int j=1;j<n;j++)
  59. {
  60. if(s[i][j]=='#'&&s[i][j+1]=='#')
  61. {
  62. // cout<<j+(i-1)*n<<" "<<j+(i-1)*n+1<<endl;
  63. add(j+(i-1)*n,j+(i-1)*n+1);
  64. add(j+(i-1)*n+1,j+(i-1)*n);
  65. }
  66. }
  67. }
  68. for(int j=1;j<=n;j++)
  69. {
  70. for(int i=1;i<n;i++)
  71. {
  72. if(s[i][j]=='#'&&s[i+1][j]=='#')
  73. {
  74. // cout<<j+(i-1)*n<<" "<<j+(i-1)*n+n<<endl;
  75. add(j+(i-1)*n,j+(i-1)*n+n);
  76. add(j+(i-1)*n+n,j+(i-1)*n);
  77. }
  78. }
  79. }
  80. int ans=0;
  81. memset(match,-1,sizeof(match));
  82. for(int i=1;i<=n*n;i++)
  83. {
  84. memset(visit,0,sizeof(visit));
  85. if(dfs(i))
  86. ans++;
  87. }
  88. cout<<"Case "<<tt<<": "<<ans/2<<endl;
  89. }
  90. }

  

牛客网-2018年全国多校算法寒假训练营练习比赛(第四场)-A的更多相关文章

  1. 【2018年全国多校算法寒假训练营练习比赛(第四场)-D】小明的挖矿之旅

    题目链接:https://www.nowcoder.com/acm/contest/76/D 做题时没注意到“无论出现在哪个格子”..题中也没说明一个格子只能经过一次,其实没有想象的复杂. 判断如果点 ...

  2. 【2018年全国多校算法寒假训练营练习比赛(第四场)-A】石油采集(匈牙利算法)

    试题链接:https://www.nowcoder.com/acm/contest/76/A [思路] 每个‘#’的右边和下边如果也是‘#’说明这两个点构成通路,以此重构一幅图,然后找二分图的最大匹配 ...

  3. 2018年全国多校算法寒假训练营练习比赛(第一场)闯关的lulu

    闯关的lulu 链接:https://www.nowcoder.com/acm/contest/67/J 来源:牛客网 题目描述 勇者lulu某天进入了一个高度10,000,000层的闯关塔,在塔里每 ...

  4. 2018年全国多校算法寒假训练营练习比赛(第二场)B - TaoTao要吃鸡

    链接:https://www.nowcoder.com/acm/contest/74/B来源:牛客网 题目描述 Taotao的电脑带不动绝地求生,所以taotao只能去玩pc版的荒野行动了, 和绝地求 ...

  5. 2018年全国多校算法寒假训练营练习比赛(第二场)F - 德玛西亚万岁

    链接:https://www.nowcoder.com/acm/contest/74/F来源:牛客网 题目描述 德玛西亚是一个实力雄厚.奉公守法的国家,有着功勋卓著的光荣军史. 这里非常重视正义.荣耀 ...

  6. 2018年全国多校算法寒假训练营练习比赛(第一场)J - 闯关的lulu

    链接:https://www.nowcoder.com/acm/contest/67/J来源:牛客网 题目描述 勇者lulu某天进入了一个高度10,000,000层的闯关塔,在塔里每到一层楼,他都会获 ...

  7. 2018年全国多校算法寒假训练营练习比赛(第二场) B TaoTao要吃鸡 01背包变形题

    链接:https://www.nowcoder.com/acm/contest/74/B来源:牛客网 Taotao的电脑带不动绝地求生,所以taotao只能去玩pc版的荒野行动了, 和绝地求生一样,游 ...

  8. 2018年全国多校算法寒假训练营练习比赛(第一场)D N阶汉诺塔变形

    https://www.nowcoder.com/acm/contest/67/D 思路: 先手动模拟一下过程,以下是模拟过程,按顺序表示第几步需要移动的盘标号 1 1 2 1 1 2 1 1 3 1 ...

  9. 2018年全国多校算法寒假训练营练习比赛(第一场)E 恋与程序员

    https://www.nowcoder.com/acm/contest/67/E 思路: dfs 代码: #include<bits/stdc++.h> using namespace ...

随机推荐

  1. JVM-自动内存管理机制

    关于GC: 垃圾收集通常被称为"GC",经过半个世纪的发展,内存动态分配与内存回收技术已经相当成熟.那我们为何还要了解GC和内存分配呢? 当我们需要排除各种内存溢出.内存泄露问题时 ...

  2. Materialized View模式

    Materialized-View模式是在要求数据格式不利于查询操作的情况下,根据多个数据仓库的数据生成预生成的视图的一种模式.这种模式可以帮助支持高效的查询和数据提取,提高应用程序的性能. 问题 在 ...

  3. 使用keras的LSTM进行预测----实战练习

    代码 import numpy as np from keras.models import Sequential from keras.layers import Dense from keras. ...

  4. mybatis百科-结果集映射类ResultMap

    目录 1 成员变量 2 构造函数 3 其他函数 3.1 setter 和 getter 函数 4 静态内部类 4.1 成员变量 4.2 构造函数 4.3 建造者相关的函数 4.4 获取配置的构造方法参 ...

  5. c++_work

    while((ch=getopt(argc, argv, "X:Y:C:")) != EOF) { switch((char)ch) { case 'X': strcpy(strS ...

  6. 关于NETCORE中的捆绑与最小化 以及与CDN连用

    参考文档:MSDN   Bundling and minification in ASP.NET Core 细说ASP.NET Core静态文件的缓存方式

  7. ORM简介 单表添加修改删除表记录

    ---------------------------------------------------------------目标既定,在学习和实践过程中无论遇到什么困难.曲折都不灰心丧气,不轻易改变 ...

  8. centos7下zabbix安装与部署

    1.Zabbix介绍 zabbix是一个基于WEB界面的提供分布式系统监视以及网络监视功能的企业级的开源解决方案. zabbix能监视各种网络参数,保证服务器系统的安全运营:并提供灵活的通知机制以让系 ...

  9. Redux 入门教程(三):React-Redux 的用法

    为了方便使用,Redux 的作者封装了一个 React 专用的库 React-Redux,本文主要介绍它. 这个库是可以选用的.实际项目中,你应该权衡一下,是直接使用 Redux,还是使用 React ...

  10. Python—模块介绍

    什么是模块? 在计算机程序的开发过程中,随着程序代码越写越多,在一个文件里代码就会越来越长,越来越不容易维护. 为了编写可维护的代码,我们把很多函数分组,分别放到不同的文件里,这样,每个文件包含的代码 ...