1475: 方格取数

Time Limit: 5 Sec  Memory Limit: 64 MB
Submit: 1025  Solved: 512
[Submit][Status][Discuss]

Description

在一个n*n的方格里,每个格子里都有一个正整数。从中取出若干数,使得任意两个取出的数所在格子没有公共边,且取出的数的总和尽量大。

Input

第一行一个数n;(n<=30) 接下来n行每行n个数描述一个方阵

Output

仅一个数,即最大和

Sample Input

2
1 2
3 5

Sample Output

6
 
黑白染色求最小割
 #include<iostream>
#include<cstring>
#include<cstdlib>
#include<cstdio>
#include<cmath>
#include<algorithm>
using namespace std;
int tx[]={,,,-};
int ty[]={,,-,};
struct data {
int to,next,f;
}e[];
int head[],cnt;
void add(int u,int v,int f){e[cnt].to=v;e[cnt].next=head[u];e[cnt].f=f;head[u]=cnt++;}
int n,m,s,t;
bool vis[];
int q[],dis[];
bool bfs() {
memset(dis,-,sizeof(dis));
int h=,tail=;
q[h]=t;
dis[t]=;
while(h!=tail) {
int now=q[h++];if(h==) h=;
for(int i=head[now];i>=;i=e[i].next) {
if(dis[e[i].to]>-||!e[i^].f) continue;
dis[e[i].to]=dis[now]-;
q[tail++]=e[i].to;if(tail==) tail=;
}
}
return dis[s]>=-;
}
int dfs(int now,int a) {
int f=,flow=;
if(now==t) return a;
for(int i=head[now];i>=;i=e[i].next) {
int to=e[i].to;
if(dis[to]==dis[now]+&&e[i].f>) {
f=dfs(to,min(a,e[i].f));
flow+=f;
e[i].f-=f;
e[i^].f+=f;
a-=f;
if(a==) break;
}
}
return flow;
}
int num=;
int ans=;
int sum=;
void dinic() {
while(bfs()) {
sum+=dfs(s,);
}
printf("%d",num-sum);
}
int tt=;
int a[][];
int main() {
memset(head,-,sizeof(head));
scanf("%d%d",&m,&n);
s=,t=;
for(int i=;i<=m;i++)
for(int j=;j<=n;j++) {
scanf("%d",&a[i][j]);
num+=a[i][j];
}
for(int i=;i<=m;i++) {
for(int j=;j<=n;j++) {
if((i+j)&) {
add(s,(i-)*n+j,a[i][j]),add((i-)*n+j,s,);
for(int k=;k<=;k++) {
int tox=i+tx[k],toy=j+ty[k];
if(tox==||tox>m||toy==||toy>n) continue;
add((i-)*n+j,(tox-)*n+toy,1e8);
add((tox-)*n+toy,(i-)*n+j,);
}
}
else add((i-)*n+j,t,a[i][j]),add(t,(i-)*n+j,); }
}
dinic();
}

[BZOJ1475]方格取数 网络流 最小割的更多相关文章

  1. 【bzoj1475】方格取数 网络流最小割

    题目描述 在一个n*n的方格里,每个格子里都有一个正整数.从中取出若干数,使得任意两个取出的数所在格子没有公共边,且取出的数的总和尽量大. 输入 第一行一个数n:(n<=30) 接下来n行每行n ...

  2. HDU 1569 方格取数(2) (最小割)

    方格取数(2) Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Su ...

  3. luogu2774 [网络流24题]方格取数问题 (最小割)

    常见套路:棋盘黑白染色,就变成了一张二分图 然后如果选了黑点,四周的白点就不能选了,也是最小割的套路.先把所有价值加起来,再减掉一个最少的不能选的价值,也就是割掉表示不选 建边(S,黑点i,v[i]) ...

  4. LuoguP2774 方格取数问题(最小割)

    题目背景 none! 题目描述 在一个有 m*n 个方格的棋盘中,每个方格中有一个正整数.现要从方格中取数,使任意 2 个数所在方格没有公共边,且取出的数的总和最大.试设计一个满足要求的取数算法.对于 ...

  5. 洛谷P2774 方格取数问题(最小割)

    题意 $n \times m$的矩阵,不能取相邻的元素,问最大能取多少 Sol 首先补集转化一下:最大权值 = sum - 使图不连通的最小权值 进行黑白染色 从S向黑点连权值为点权的边 从白点向T连 ...

  6. BZOJ 1475: 方格取数( 网络流 )

    本来想写道水题....结果调了这么久!就是一个 define 里面少加了个括号 ! 二分图最大点权独立集...黑白染色一下 , 然后建图 : S -> black_node , white_no ...

  7. [网络流24题#9] [cogs734] 方格取数 [网络流,最大流最小割]

    将网格分为两部分,方法是黑白染色,即判断(i+j)&1即可,分开后从白色格子向黑色格子连边,每个点需要四条(边界点可能更少),也就是每个格子周围的四个方向.之后将源点和汇点分别于黑白格子连边, ...

  8. P2774 方格取数(网络流)

    https://www.luogu.com.cn/problem/P2774 在一个有 m×n 个方格的棋盘中,每个方格中有一个正整数. 现要从方格中取数,使任意2个数所在方格没有公共边,且取出的数的 ...

  9. BZOJ1324Exca王者之剑&BZOJ1475方格取数——二分图最大独立集

    题目描述   输入 第一行给出数字N,M代表行列数.N,M均小于等于100 下面N行M列用于描述数字矩阵 输出 输出最多可以拿到多少块宝石 样例输入 2 2 1 2 2 1 样例输出 4   题意就是 ...

随机推荐

  1. ui-grid表格怎么实现内容居中

    这次是思想落后了,只关注怎么使用原生的ui-grid样式来实现这一需求,后来发现可以通过此列的cellTemplate来为列指定内容,从而可以使用css调整样式. ps:其实有时候换种思路,豁然开朗. ...

  2. [Leetcode] plus one 加一

    Given a number represented as an array of digits, plus one to the number. 题意:给定数以数组的形式存储,然后计算该数加1的值. ...

  3. BZOJ3671 [Noi2014]随机数生成器 【贪心】

    题目链接 BZOJ3671 题解 模拟题意生成矩阵贪心从小选择即可 每选择一个,就标记其左下右上矩阵 由于每次都是标记一个到边界的矩阵,所以一旦遇到标记过就直接退出即可,可以保证复杂度 还有就是空间和 ...

  4. 洛谷 P2480 [SDOI2010]古代猪文 解题报告

    P2480 [SDOI2010]古代猪文 题目背景 "在那山的那边海的那边有一群小肥猪.他们活泼又聪明,他们调皮又灵敏.他们自由自在生活在那绿色的大草坪,他们善良勇敢相互都关心--" ...

  5. HDU2255:奔小康赚大钱(KM算法)

    奔小康赚大钱 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Subm ...

  6. HDU 多校对抗赛第二场 1010 Swaps and Inversions

    Swaps and Inversions Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Oth ...

  7. [洛谷P1074] 靶形数独

    洛谷题目链接:靶形数独 题目描述 小城和小华都是热爱数学的好学生,最近,他们不约而同地迷上了数独游戏,好胜的他们想用数独来一比高低.但普通的数独对他们来说都过于简单了,于是他们向 Z 博士请教,Z 博 ...

  8. 【SPOJ - QTREE2】树链剖分

    http://acm.hust.edu.cn/vjudge/problem/19960 题意: 有一棵N个节点的树(1<=N<=10000),N-1条边,边的编号为1~N-1,每条边有一个 ...

  9. JS形参与实参问题

    JavaScript的参数传递也都是采用值传递的方式进行传值. (1)     通过实参调用函数的时候,传入函数里的是实参的副本而不是实参,因此在函数里面修改参数值并不会对实参造成影响. 例如:将全局 ...

  10. Apache服务器

    Apache服务器 一  简介 1   www:world  wide  web    万维网 http    协议:  超文本传输协议 HTML语言:  超文本标识语言 2   URL:统一资源定位 ...