传送门

看到棋盘先黑白染色冷静一下

然后发现...攻击的时候同种颜色不会相互攻击

这样就是个网络流经典套路了,关于这个套路我以前好像写过几题,那边有解释一下:传送门

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<cmath>
#include<queue>
using namespace std;
typedef long long ll;
inline int read()
{
int x=,f=; char ch=getchar();
while(ch<''||ch>'') { if(ch=='-') f=-; ch=getchar(); }
while(ch>=''&&ch<='') { x=(x<<)+(x<<)+(ch^); ch=getchar(); }
return x*f;
}
const int N=1e6+,INF=1e9,xx[]={,,,,-,-,-,-},yy[]={,,-,-,-,-,,};
namespace Dinic {
int fir[N],from[N<<],to[N<<],val[N<<],cntt=;
int S,T,dep[N],Fir[N];
queue <int> Q;
inline void add(int a,int b,int c)
{
from[++cntt]=fir[a]; fir[a]=cntt;
to[cntt]=b; val[cntt]=c;
from[++cntt]=fir[b]; fir[b]=cntt;
to[cntt]=a; val[cntt]=;
}
bool BFS()
{
for(int i=;i<=T;i++) Fir[i]=fir[i],dep[i]=;
Q.push(S); dep[S]=;
while(!Q.empty())
{
int x=Q.front(); Q.pop();
for(int i=fir[x];i;i=from[i])
{
int &v=to[i]; if(dep[v]||!val[i]) continue;
dep[v]=dep[x]+; Q.push(v);
}
}
return dep[T]>;
}
int DFS(int x,int mxfl)
{
if(x==T||!mxfl) return mxfl;
int fl=,res;
for(int &i=Fir[x];i;i=from[i])
{
int &v=to[i]; if(dep[v]!=dep[x]+||!val[i]) continue;
if( res=DFS(v,min(mxfl,val[i])) )
{
mxfl-=res; val[i]-=res;
fl+=res; val[i^]+=res;
if(!mxfl) break;
}
}
return fl;
}
int dinic() { int res=; while(BFS()) res+=DFS(S,INF); return res; }
}
int n,a[][],id[][],tot;
char s[];
int main()
{
n=read();
for(int i=;i<=n;i++)
{
scanf("%s",s+); int len=strlen(s+);
for(int j=;j<=len;j++)
{
a[i][j]=(s[j]=='');
if(!a[i][j]) id[i][j]=++tot;
}
}
Dinic::T=tot+;
for(int i=;i<=n;i++)
for(int j=;j<=n;j++)
{
if(a[i][j]) continue;
if((i+j)&) { Dinic::add(id[i][j],Dinic::T,); continue; }
Dinic::add(Dinic::S,id[i][j],);
for(int k=;k<;k++)
{
int px=i+xx[k],py=j+yy[k];
if(px<||px>n||py<||py>n||a[px][py]) continue;
Dinic::add(id[i][j],id[px][py],INF);
}
}
printf("%d\n",tot-Dinic::dinic());
return ;
}

最新文章

  1. Raid与DAN、SAN、NAS基础
  2. Linux 多线程互斥量互斥
  3. C#和SQL实现的字符串相似度计算代码分享
  4. e.Handled的理解
  5. server application error应用错误
  6. 操作系统模仿CMD
  7. arithmetic-slices-ii-subsequence(太难了)
  8. 执行插入语句时直接返回插入信息的自增id,判断是否为空
  9. 转贴:C++中指针和引用的区别
  10. dubbo框架揭秘之服务引用
  11. UESTC 251 最长上升子序列O(nlgn)
  12. SpringMVC 框架系列之初识与入门实例
  13. .NET:持续进化的统一开发平台
  14. [LeetCode] Baseball Game 棒球游戏
  15. 获取高精度时间注意事项 (QueryPerformanceCounter , QueryPerformanceFrequency)
  16. 浅谈Python web框架
  17. Lowest Common Ancestor of a Binary Search Tree(Java 递归与非递归)
  18. 类的专有方法(__len__)
  19. 整合VIM和Graphviz,并且使用本办法实现实时预览
  20. The algorithm of entropy realization

热门文章

  1. JSP中EL表达式不能使用的问题
  2. python学习之路(5)
  3. springmvc文件上传 参数为MultipartFile 转换为File
  4. 【Java基础】谈谈集合.List
  5. Linux常用命令及操作(第二弹)
  6. UVa 839 -- Not so Mobile(树的递归输入)
  7. Android HandlerThread与IntentService
  8. CSS样式属性单词之Left
  9. CentOS7 通过 YUM 升级 VIM8
  10. 2019-03-19 Fiori学习笔记 Fiori开发环境