每两个能互相攻击且能放置的点连一条双向边,然后跑二分图最大点独立集即可

  1. #include<algorithm>
  2. #include<iostream>
  3. #include<cstdlib>
  4. #include<cstring>
  5. #include<cstdio>
  6. #include<cmath>
  7. using namespace std;
  8.  
  9. typedef long long LL;
  10.  
  11. #define M 80010
  12. #define N 210
  13.  
  14. struct edge
  15. {
  16. int to,next;
  17. }e[M<<1];
  18. int head[M<<1];
  19. int cnt;
  20.  
  21. int ly[M];
  22.  
  23. int a[N][N],flag[M];
  24.  
  25. char s[N];
  26.  
  27. int dx[]={1,1,2,2};
  28. int dy[]={2,-2,1,-1};
  29.  
  30. int n,q;
  31. int tot,ans;
  32.  
  33. void link(int x,int y)
  34. {
  35. e[++cnt]=(edge){y,head[x]};
  36. head[x]=cnt;
  37. }
  38.  
  39. bool find(int x)
  40. {
  41. for (int i=head[x];i;i=e[i].next)
  42. {
  43. int t=e[i].to;
  44. if (flag[t]!=q)
  45. {
  46. flag[t]=q;
  47. if (!ly[t] || find(ly[t]))
  48. {
  49. ly[t]=x;
  50. return true;
  51. }
  52. }
  53. }
  54. return false;
  55. }
  56.  
  57. int main()
  58. {
  59. scanf("%d",&n);
  60. for (int i=1;i<=n;i++)
  61. {
  62. scanf("%s",s+1);
  63. for (int j=1;j<=n;j++)
  64. if (s[j]=='0')
  65. a[i][j]=++tot;
  66. else
  67. a[i][j]=0;
  68. }
  69. for (int i=1;i<=n;i++)
  70. for (int j=1;j<=n;j++)
  71. if (a[i][j])
  72. for (int k=0;k<4;k++)
  73. {
  74. int x=i+dx[k],y=j+dy[k];
  75. if (x<1 || x>n || y<1 || y>n)
  76. continue;
  77. if (a[x][y])
  78. link(a[i][j],a[x][y]),link(a[x][y],a[i][j]);
  79. }
  80. for (int i=1;i<=tot;i++)
  81. {
  82. q++;
  83. if (find(i))
  84. ans++;
  85. }
  86. printf("%d\n",tot-ans/2);
  87. return 0;
  88. }

  

【bzoj3175】[Tjoi2013]攻击装置的更多相关文章

  1. bzoj4808: 马 & bzoj3175: [Tjoi2013]攻击装置 (黑白染色+最小割)

    bzoj4808: 马 & bzoj3175: [Tjoi2013]攻击装置 题目:传送门 简要题意: 和n皇后问题差不多,但是这里是每个棋子走日子,而且有些格子不能放棋子.求最多能放多少个棋 ...

  2. BZOJ3175: [Tjoi2013]攻击装置

    题解: 最大点独立集...好像水过头了... 不过发现我二分图好像忘完了!!! 代码: #include<cstdio> #include<cstdlib> #include& ...

  3. BZOJ3175 Tjoi2013 攻击装置(二分图匹配)

    传送门 Description 给定一个01矩阵,其中你可以在0的位置放置攻击装置.每一个攻击装置(x,y)都可以按照"日"字攻击其周围的 8个位置(x-1,y-2),(x-2,y ...

  4. BZOJ3175[Tjoi2013]攻击装置——二分图最大独立集

    题目描述 给定一个01矩阵,其中你可以在0的位置放置攻击装置.每一个攻击装置(x,y)都可以按照“日”字攻击其周围的 8个位置(x-1,y-2),(x-2,y-1),(x+1,y-2),(x+2,y- ...

  5. BZOJ3175:[TJOI2013]攻击装置(二分图最大独立集)

    Description 给定一个01矩阵,其中你可以在0的位置放置攻击装置.每一个攻击装置(x,y)都可以按照“日”字攻击其周围的 8个位置(x-1,y-2),(x-2,y-1),(x+1,y-2), ...

  6. bzoj3175: [Tjoi2013]攻击装置&&4808: 马

    终于知道为啥网络流这么受欢迎了. 其实就是构个图模板一下的事儿,比较好打是吧. 然后这题网络流黑白染色(其实感觉上匈牙利更加直接好想啊,但是实际上黑白染色给人感觉就是二分图) st连白而ed连黑,流量 ...

  7. 【BZOJ4808/3175】马/[Tjoi2013]攻击装置 最小割

    [BZOJ4808]马 Description 众所周知,马后炮是中国象棋中很厉害的一招必杀技."马走日字".本来,如果在要去的方向有别的棋子挡住(俗称"蹩马腿" ...

  8. BZOJ 3175: [Tjoi2013]攻击装置( 匈牙利 )

    黑白染成二分图, 然后不能同时选的就连边, 最大匹配数为m, t为不能放的数目, 则题目所求最大点独立集为 n*n-m-t -------------------------------------- ...

  9. 【洛谷】4304:[TJOI2013]攻击装置【最大点独立集】【二分图】2172: [国家集训队]部落战争【二分图/网络流】【最小路径覆盖】

    P4304 [TJOI2013]攻击装置 题目描述 给定一个01矩阵,其中你可以在0的位置放置攻击装置. 每一个攻击装置(x,y)都可以按照“日”字攻击其周围的8个位置(x-1,y-2),(x-2,y ...

  10. 【BZOJ 3175】 3175: [Tjoi2013]攻击装置(二分图匹配)

    3175: [Tjoi2013]攻击装置 Description 给定一个01矩阵,其中你可以在0的位置放置攻击装置.每一个攻击装置(x,y)都可以按照“日”字攻击其周围的 8个位置(x-1,y-2) ...

随机推荐

  1. 九度oj 题目1491:求1和2的个数

    题目描述: 给定正整数N,函数F(N)表示小于等于N的自然数中1和2的个数之和,例如:1,2,3,4,5,6,7,8,9,10序列中1和2的个数之和为3,因此F(10)=3.输入N,求F(N)的值,1 ...

  2. get 发送ajax请求

    上demo小案例 <!DOCTYPE html> <html> <head> <meta charset="utf-8"> < ...

  3. [luoguP2324] [SCOI2005]骑士精神(A*?)

    传送门 蒟蒻并不懂A*是什么,但是题解里有个Astar 可以看出,当前棋盘和最终的棋盘如果有k个不同的,那么至少需要k-1步来移动 所以如果 当前步数 + k - 1 > limit 就直接退出 ...

  4. mysql解压之后的安装

    远程连接报错(error:10061)看这篇:https://www.cnblogs.com/zipon/p/5877820.html 从5.6.20之后root会自动生成一个随机密码在/root/. ...

  5. 高通android7.0刷机工具使用介绍

    刷机工具安装 1. 安装QPST.WIN.2.7 Installer-00448.3 2. 安装python2.7,并配置其环境变量 刷机方法 1.将编译后的刷机文件拷贝到如下目录:SC20_CE_p ...

  6. Spring注解处理Ajax请求-JSON格式[系统架构:Spring+SpringMVC+MyBatis+MySql]

    1.前端jsp页面 <div class="tab_tip"> 请输入[身份证号或姓名] <input type="text" class=& ...

  7. LL(1)语法分析器 //c++实现

    #include<iostream> #include<string> #include<map> #include<vector> #include& ...

  8. js-判断当前页面是否在微信浏览器中打开

    方案一:推荐 var ua = navigator.userAgent.toLowerCase(); var isWinxin = ua.indexOf('micromessenger') != -1 ...

  9. android Containers控件

    1.RadioGroup 一组单选框容器 2.ListView 3.GridView 4.ExpandableListView 可折叠列表 5.ScrollView 上下滚动条 6.Horizonta ...

  10. Python 和 Elasticsearch 构建简易搜索

    Python 和 Elasticsearch 构建简易搜索 作者:白宁超 2019年5月24日17:22:41 导读:件开发最大的麻烦事之一就是环境配置,操作系统设置,各种库和组件的安装.只有它们都正 ...