这个其实就是在说明相邻的点不能取,我们发现只要其满足这个条件他总能走出来,那么我们就最小割就是了,我们先黑白染色,S 一排黑点 一排白点 T 对于相邻的点我们就直接中间连INF,于是就满足只要一个点选了,另一个点就不能选,我们跑完最小割就得到了满足相邻的点要么都选要么只选一方的最下舍弃。

#include <cstdio>
#include <cstring>
#define r register
#define Inf 0x7f7f7f7f
using namespace std;
inline int read()
{
r int sum=;
r char ch=getchar();
while(ch<''||ch>'')ch=getchar();
while(ch>=''&&ch<='')
{
sum=(sum<<)+(sum<<)+ch-'';
ch=getchar();
}
return sum;
}
int a[][],S,T,n,m;
struct Via
{
int to,next,f;
}c[];
int head[],t=;
inline void add(int x,int y,int z)
{
c[++t].to=y;
c[t].f=z;
c[t].next=head[x];
head[x]=t;
}
inline int Min(int x,int y)
{
return x<y?x:y;
}
int q[],top,tail,deep[];
inline bool bfs()
{
memset(deep,,sizeof(deep));
deep[S]=top=tail=,q[]=S;
while(top<=tail)
{
r int x=q[top++];
if(x==T)return ;
for(r int i=head[x];i;i=c[i].next)
if(c[i].f&&deep[c[i].to]==)
{
deep[c[i].to]=deep[x]+;
q[++tail]=c[i].to;
}
}
return ;
}
int dfs(int x,int v)
{
if(x==T||!v)return v;
r int ret=;
for(r int i=head[x];i;i=c[i].next)
if(c[i].f&&deep[c[i].to]==deep[x]+)
{
r int f=dfs(c[i].to,Min(v,c[i].f));
v-=f,ret+=f,c[i].f-=f,c[i^].f+=f;
if(!v)break;
}
if(!ret)deep[x]=;
return ret;
}
inline int dinic()
{
r int ans=;
while(bfs())ans+=dfs(S,Inf);
return ans;
}
int main()
{
freopen("Excalibur.in","r",stdin);
freopen("Excalibur.out","w",stdout);
n=read(),m=read();
r int ans=;
S=n*m+,T=S+;
for(int i=;i<=n;i++)
for(int j=;j<=m;j++)
{
a[i][j]=read(),ans+=a[i][j];
if((i+j)&)
{
add(S,(i-)*m+j,a[i][j]),add((i-)*m+j,S,);
if(i!=)add((i-)*m+j,(i-)*m+j,Inf),add((i-)*m+j,(i-)*m+j,);
if(j!=)add((i-)*m+j,(i-)*m+j-,Inf),add((i-)*m+j-,(i-)*m+j,);
if(i!=n)add((i-)*m+j,i*m+j,Inf),add(i*m+j,(i-)*m+j,);
if(j!=m)add((i-)*m+j,(i-)*m+j+,Inf),add((i-)*m+j+,(i-)*m+j,);
}
else
{
add((i-)*m+j,T,a[i][j]),add(T,(i-)*m+j,);
}
}
printf("%d",ans-dinic());
}

最新文章

  1. 【Win10应用开发】自适应磁贴中的分组
  2. TCP滑动窗口机制
  3. systemctl 命令的用法
  4. 6、SQL基础整理(日期时间数据类型,转换函数)
  5. Binary Indexed Tree 2D 分类: ACM TYPE 2014-09-01 08:40 95人阅读 评论(0) 收藏
  6. FastJson与Gson小测试
  7. 代码片段--Makefile之大型工程项目子目录Makefile的一种通用写法
  8. opencv 矩阵的相似性对比 (图片之间比较)
  9. IE6下最小19px像素
  10. jenkins+docker 持续构建非docker in docker
  11. SimpleDateFormat 常用用法
  12. ISP PIPLINE (十二) Sharpening
  13. 如何在java List中进行模糊查询
  14. 【翻译】WPF4.5新特性(MSDN的翻译读不太懂)
  15. STM32 printf()函数和scanf()函数重定向到串口
  16. ubuntu16.04下安装配置pl-svo
  17. 【TP5.0】model的操作方法
  18. jzoj5377 开拓
  19. nc命令的常用参数介绍
  20. HDOJ 4876 ZCC loves cards

热门文章

  1. Cent OS 下 VI 使用方法
  2. python基础知识 -- set集合
  3. 内存泄漏导致程序killed
  4. [BZOJ1455]罗马游戏(左偏树)
  5. Android Stadio 指定文件打开类型
  6. 2018春季校园招聘笔经面经合集:Java开发岗
  7. 【C#】 URL Protocol
  8. 《百词斩&#183;象形9000》第一册(上) 符号Symbol 1
  9. 七天入门C++
  10. mysql创建用户并手授权