Description


在一个有 m*n 个方格的棋盘中,每个方格中有一个正整数。现要从方格中取数,使任意 2 个数所在方格没有公共边,且取出的数的总和最大。试设计一个满足要求的取数算法。对于给定的方格棋盘,按照取数要求编程找出总和最大的数。

Input


第 1 行有 2 个正整数 m 和 n,分别表示棋盘的行数和列数。接下来的 m 行,每行有 n 个正整数,表示棋盘方格中的数。

Output


程序运行结束时,将取数的最大总和输出

Sample Input


3 3
1 2 3
3 2 3
2 3 1

Sample Output


11

Hint


m,n<=100

题解


因为相邻两个数不能同时取的题设要求,像国际象棋棋盘一样染色 得到二分图

然后S向每个黑点连边,容量为点权

每个白点向T连边,容量为点权

最后每个黑点到能到的白点(上下左右)连边,容量为INF(表示这些边中需要割掉一些)

最后跑一遍最大流 利用最大流最小割定理可得此为最小割(最少要割掉的点权) ans=总点权-最小割

 #include<queue>
#include<cmath>
#include<cstdio>
#include<cstring>
#include<iostream>
using namespace std;
const int INF=;
struct emm{
int e,f,v;
}a[];
int h[];
int tot=;
void con(int x,int y,int l)
{
if(y==-)return;
a[++tot].f=h[x];
h[x]=tot;
a[tot].e=y;
a[tot].v=l;
a[++tot].f=h[y];
h[y]=tot;
a[tot].e=x;
return;
}
int tu[][];
int num[][];
queue<int>q;
int d[];
int m,n,s,t;
bool bfs()
{
memset(d,,sizeof(d));
d[s]=;
q.push(s);
while(!q.empty())
{
int x=q.front();q.pop();
for(int i=h[x];i;i=a[i].f)
if(!d[a[i].e]&&a[i].v)
{
d[a[i].e]=d[x]+;
q.push(a[i].e);
}
}
return d[t];
}
int dfs(int x,int al)
{
if(x==t||!al)return al;
int fl=;
for(int i=h[x];i;i=a[i].f)
if(d[a[i].e]==d[x]+&&a[i].v)
{
int f=dfs(a[i].e,min(a[i].v,al));
if(f)
{
fl+=f;
al-=f;
a[i].v-=f;
a[i^].v+=f;
if(!al)break;
}
}
if(!fl)d[x]=-;
return fl;
}
int main()
{
scanf("%d%d",&m,&n);
s=,t=m*n+;
int sum=;
for(int i=;i<=m;++i)
for(int j=;j<=n;++j)
{
scanf("%d",&tu[i][j]);
sum+=tu[i][j];
}
memset(num,-,sizeof(num));
int tim=;
for(int i=;i<=m;++i)
for(int j=;j<=n;++j)
num[i][j]=++tim;
for(int i=;i<=m;++i)
for(int j=;j<=n;++j)
if((i+j)%==)con(num[i][j],t,tu[i][j]);
else
{
con(s,num[i][j],tu[i][j]);
con(num[i][j],num[i-][j],INF);
con(num[i][j],num[i+][j],INF);
con(num[i][j],num[i][j-],INF);
con(num[i][j],num[i][j+],INF);
}
int ans=;
while(bfs())ans+=dfs(s,INF);
cout<<sum-ans;
return ;
}
 

「网络流24题」「LuoguP2774」方格取数问题(最大流 最小割的更多相关文章

  1. 【最小割/二分图最大独立集】【网络流24题】【P2774】 方格取数问题

    Description 给定一个 \(n~\times~m\) 的矩阵,每个位置有一个正整数,选择一些互不相邻的数,最大化权值和 Limitation \(1~\leq~n,~m~\leq~100\) ...

  2. LOJ6003 - 「网络流 24 题」魔术球

    原题链接 Description 假设有根柱子,现要按下述规则在这根柱子中依次放入编号为的球. 每次只能在某根柱子的最上面放球. 在同一根柱子中,任何2个相邻球的编号之和为完全平方数. 试设计一个算法 ...

  3. LOJ6002 - 「网络流 24 题」最小路径覆盖

    原题链接 Description 求一个DAG的最小路径覆盖,并输出一种方案. Solution 模板题啦~ Code //「网络流 24 题」最小路径覆盖 #include <cstdio&g ...

  4. LOJ6001 - 「网络流 24 题」太空飞行计划

    原题链接 Description 有个实验和个仪器,做实验有报酬买仪器有花费.每个实验都需要一些仪器,求最大净收益(实验报酬仪器花费),并输出一组方案. Solution 实验向所需仪器连边,实验的点 ...

  5. LOJ6000 - 「网络流 24 题」搭配飞行员

    原题链接 题意简述 求二分图的最大匹配. 题解 这里写的是匈牙利算法. 表示节点的当前匹配. 为真表示在这一轮匹配中,无法给节点一个新的匹配.所以如果为真就不用再dfs它了,直接continue就好. ...

  6. LibreOJ #6014. 「网络流 24 题」最长 k 可重区间集

    #6014. 「网络流 24 题」最长 k 可重区间集 内存限制:256 MiB时间限制:1000 ms标准输入输出 题目类型:传统评测方式:文本比较 上传者: 匿名 提交提交记录统计讨论测试数据   ...

  7. Libre 6013 「网络流 24 题」负载平衡 (网络流,最小费用最大流)

    Libre 6013 「网络流 24 题」负载平衡 (网络流,最小费用最大流) Description G 公司有n 个沿铁路运输线环形排列的仓库,每个仓库存储的货物数量不等.如何用最少搬运量可以使n ...

  8. Libre 6012 「网络流 24 题」分配问题 (网络流,费用流)

    Libre 6012 「网络流 24 题」分配问题 (网络流,费用流) Description 有n件工作要分配给n个人做.第i个人做第j件工作产生的效益为\(c_{ij}\).试设计一个将n件工作分 ...

  9. Libre 6011 「网络流 24 题」运输问题 (网络流,最小费用最大流)

    Libre 6011 「网络流 24 题」运输问题 (网络流,最小费用最大流) Description W 公司有m个仓库和n个零售商店.第i个仓库有\(a_i\)个单位的货物:第j个零售商店需要\( ...

  10. LibreOJ #6013. 「网络流 24 题」负载平衡 最小费用最大流 供应平衡问题

    #6013. 「网络流 24 题」负载平衡 内存限制:256 MiB时间限制:1000 ms标准输入输出 题目类型:传统评测方式:文本比较 上传者: 匿名 提交提交记录统计讨论测试数据   题目描述 ...

随机推荐

  1. .Net Core下使用RabbitMQ比较完备的两种方案(虽然代码有点惨淡,不过我会完善)

    一.前言     上篇说给大家来写C#和Java的方案,最近工作也比较忙,迟到了一些,我先给大家补上C#的方案,另外如果没看我上篇博客的人最好看一下,否则你可能看的云里雾里的,这里我就不进行具体的方案 ...

  2. HBase总结

    1.HBase是一个分布式的.面向列的开源数据库,该技术来源于 Fay Chang 所撰写的Google论文“Bigtable:一个结构化数据的分布式存储系统”.就像Bigtable利用了Google ...

  3. Xib/Storyboard碰到不同版本的Xcode真是想死啊!

    Command /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/usr/ ...

  4. Mathematica 表达式求值

    表达式是变量之间的运算关系.表达式求值就是对变量赋值并运算出结果的过程. 针对于Mathematica中的表达式.有两种方法获得其值. 一是对对应的变量直接赋值.这样对应的表达式在调用时便会直接运算得 ...

  5. 天下文章一大抄 之 修改excel 创建时间

    Sub ChangeDate()ThisWorkbook.BuiltinDocumentProperties("Creation Date") = #2 28 2016 13:25 ...

  6. [转] twemproxy ketama一致性hash分析

    评注:提到HAProxy业务层proxy, twemproxy存储的proxy. 其中还提到了ketama算法的实现源码 转自:http://www.cnblogs.com/basecn/p/4288 ...

  7. SolidEdge 如何由装配图快速生成爆炸视图

    建立图纸精灵,组态中选择explode(没有下一步可选了)   点击完成即可绘制爆炸图

  8. eclipse Kepler tomcat内存溢出解决方式

    使用eclipse开发ssh项目,本机8G内存,可是在打开一个表格后再打开一个页面.立即就内存溢出,网上搜到下面解决方式,未解决: 1.改动eclipse.ini參数 -vmargs -Xms1024 ...

  9. 子结点childNodes

    <!DOCTYPE HTML> <html> <head> <meta http-equiv="Content-Type" content ...

  10. Object类及其常用方法简介

    https://www.cnblogs.com/wxywxy/p/6740277.html Object类是一个特殊的类,是所有类的父类,如果一个类没有用extends明确指出继承于某个类,那么它默认 ...