#define IOS ios_base::sync_with_stdio(0); cin.tie(0);
#include <cstdio>//sprintf islower isupper
#include <cstdlib>//malloc exit strcat itoa system("cls")
#include <iostream>//pair
#include <fstream>//freopen("C:\\Users\\13606\\Desktop\\草稿.txt","r",stdin);
#include <bitset>
//#include <map>
//#include<unordered_map>
#include <vector>
#include <stack>
#include <set>
#include <string.h>//strstr substr
#include <string>
#include <time.h>// srand(((unsigned)time(NULL))); Seed n=rand()%10 - 0~9;
#include <cmath>
#include <deque>
#include <queue>//priority_queue<int, vector<int>, greater<int> > q;//less
#include <vector>//emplace_back
//#include <math.h>
#include <cassert>
//#include <windows.h>//reverse(a,a+len);// ~ ! ~ ! floor
#include <algorithm>//sort + unique : sz=unique(b+1,b+n+1)-(b+1);+nth_element(first, nth, last, compare)
using namespace std;//next_permutation(a+1,a+1+n);//prev_permutation
//******************
int abss(int a);
int lowbit(int n);
int Del_bit_1(int n);
int maxx(int a,int b);
int minn(int a,int b);
double fabss(double a);
void swapp(int &a,int &b);
clock_t __STRAT,__END;
double __TOTALTIME;
void _MS(){__STRAT=clock();}
void _ME(){__END=clock();__TOTALTIME=(double)(__END-__STRAT)/CLOCKS_PER_SEC;cout<<"Time: "<<__TOTALTIME<<" s"<<endl;}
//***********************
#define rint register int
#define fo(a,b,c) for(rint a=b;a<=c;++a)
#define fr(a,b,c) for(rint a=b;a>=c;--a)
#define mem(a,b) memset(a,b,sizeof(a))
#define pr printf
#define sc scanf
#define ls rt<<1
#define rs rt<<1|1
typedef vector<int> VI;
typedef long long ll;
const double E=2.718281828;
const double PI=acos(-1.0);
//const ll INF=(1LL<<60);
const int inf=(<<);
const double ESP=1e-;
const int mod=(int)1e9+;
const int N=;
const int M=5e5+; class DINIC
{
public:
// const int MAXN=10004,MAXWAY=100005;
int n,way,max_flow,deep[N];
int tot,head[N],cur[N];
struct EDGE{
int to,next;
int dis;
}edge[M];
void Init(int n_)
{
tot=-;//因为加反向边要^1,所以要从0开始;
n=n_;
max_flow=;
for(int i=;i<=n_;++i)
head[i]=-;
}
void add(int from,int to,int V)
{
//正向
++tot;
edge[tot].to=to;
edge[tot].dis=V;
edge[tot].next=head[from];
head[from]=tot;
//反向
swap(from,to);
++tot;
edge[tot].to=to;
edge[tot].dis=;
edge[tot].next=head[from];
head[from]=tot;
}
queue<int>q;
bool bfs(int s,int t)
{
for(int i=;i<=n;++i)
deep[i]=inf;
while(!q.empty())q.pop();
for(int i=;i<=n;++i)cur[i]=head[i];
deep[s]=;
q.push(s); while(!q.empty())
{
int now=q.front();q.pop();
for(int i=head[now];i!=-;i=edge[i].next)
{
if(deep[edge[i].to]==inf&&edge[i].dis)
{
deep[edge[i].to]=deep[now]+;
q.push(edge[i].to);
}
}
}
return deep[t]<inf;
}
int dfs(int now,int t,int limit)
{
if(!limit||now==t)return limit;
int flow=,f;
for(int i=cur[now];i!=-;i=edge[i].next)
{
cur[now]=i;
if(deep[edge[i].to]==deep[now]+&&(f=dfs(edge[i].to,t,min(limit,edge[i].dis))))
{
flow+=f;
limit-=f;
edge[i].dis-=f;
edge[i^].dis+=f;
if(!limit)break;
}
}
return flow;
}
void Dinic(int s,int t)
{
while(bfs(s,t))
max_flow+=dfs(s,t,inf);
}
}G;
int a[N][N],color[N][N]; int main()
{
int n,m;
while(~sc("%d%d",&n,&m))
{
ll TOT=;
for(int i=;i<=n;++i)
for(int j=;j<=m;++j)
sc("%d",&a[i][j]),TOT+=a[i][j];
G.Init(n*m+);
int S=n*m+,T=n*m+,cnt=;
for(int i=;i<=n;++i)
{
for(int j=;j<=m;++j)
{
if(i&)
{
if(j&)
color[i][j]=;
else
color[i][j]=;
}
else
{
if(j&)
color[i][j]=;
else
color[i][j]=;
}
}
}
for(int i=;i<=n;++i)
{
for(int j=;j<=m;++j)
{
++cnt;
if(color[i][j]==)
{
G.add(S,cnt,a[i][j]);
if(i>)G.add(cnt,cnt-m,inf);
if(j>)G.add(cnt,cnt-,inf);
if(i<n)G.add(cnt,cnt+m,inf);
if(j<m)G.add(cnt,cnt+,inf);
}
else
G.add(cnt,T,a[i][j]);
}
}
/* fo(i,1,n)
{
fo(j,1,m)
pr("%d ",color[i][j]);
pr("\n");
}*/
G.Dinic(S,T);
pr("%lld\n",TOT-G.max_flow);
}
return ;
} /**************************************************************************************/ int maxx(int a,int b)
{
return a>b?a:b;
} void swapp(int &a,int &b)
{
a^=b^=a^=b;
} int lowbit(int n)
{
return n&(-n);
} int Del_bit_1(int n)
{
return n&(n-);
} int abss(int a)
{
return a>?a:-a;
} double fabss(double a)
{
return a>?a:-a;
} int minn(int a,int b)
{
return a<b?a:b;
}

最新文章

  1. .Net中使用SendGrid Web Api发送邮件(附源码)
  2. C++输入cout与输出cin
  3. NetMq学习--发布订阅(一)
  4. 20145334 第五次 java 实验报告
  5. Altium Designer中各层的含义
  6. HTML5的绘图的支持
  7. HTTPS抓包配置
  8. java乱码详解(java中byte与char的转换)
  9. springboot+springmvc+mybatis项目整合
  10. 10.Django ModelForm
  11. OOM分析工具
  12. 微信小程序--地图组件与api-模拟器上返回的scale 与真机上不同--bindregionchange触发图标一直闪现问题
  13. Python 第三方库 cp27、cp35 等文件名的含义(转)
  14. 错误提示 nginx: [emerg] unknown directive &quot;gzip_static&quot;
  15. 【黑客免杀攻防】读书笔记5 - PE格式讲解
  16. js framework comparation
  17. HTTP协议详解(真的很经典)(转载)
  18. Codeforces 101487E - Enter The Dragon
  19. HMLocationEvent
  20. Java进阶知识点1:白捡的扩展性 - 枚举值也是对象

热门文章

  1. keepalived+mysql双主热备
  2. selenium安装与更新
  3. CISCO实验记录十一:switch端口安全配置
  4. Oracle JDBC 标准连接实例
  5. idea内存不足或过大闪退
  6. Flutter移动电商实战 --(20)首页上拉加载更多功能的制作
  7. x86 linux下如何交叉编译?
  8. kotlin中this 表达式
  9. 利用socket实现聊天-Android端核心代码
  10. LocalDB数据库修改排序规则,修复汉字变问号