P2774 方格取数(网络流)
https://www.luogu.com.cn/problem/P2774
在一个有 m×n 个方格的棋盘中,每个方格中有一个正整数。
现要从方格中取数,使任意2个数所在方格没有公共边,且取出的数的总和最大。试设计一个满足要求的取数算法。
输入格式:
文件第1行有2个正整数 m 和 n,分别表示棋盘的行数和列数。接下来的 m 行,每行有 n 个正整数,表示棋盘方格中的数。
注意:m 是行数,n 是列数。
数据保证有 1≤n,m≤30
输出格式:
输出取数的最大总和。
输入样例:
在这里给出一组输入。例如:
3 3
1 2 3
3 2 3
2 3 1
``
输出样例:
在这里给出相应的输出。例如:
11`
#include<bits/stdc++.h>
#define int long long
using namespace std;
const int maxn = 1e5+;
const int inf = 0x3f3f3f3f;
int n,m,s,t,tol,head[maxn],dep[maxn],x[][]; struct Edge
{
int v,w,nxt;
}E[maxn]; void add_edge(int u,int v,int w){
E[tol] = Edge{v,w,head[u]};
head[u] = tol++;
} void insert(int u, int v, int c){
add_edge(u, v, c);
add_edge(v, u, );
} bool Bfs(){
memset(dep,, sizeof(dep));
queue<int> q;
while(!q.empty())
q.pop();
q.push(s);
dep[s] = ;
while(!q.empty()){
int u = q.front();
q.pop();
for(int i = head[u];i != -;i = E[i].nxt)
{
if(E[i].w && !dep[E[i].v])
{
dep[E[i].v] = dep[u] + ;
q.push(E[i].v);
if(E[i].v == t)
return true;
}
}
}
return false;
} int Dfs(int u,int f){
if(u == t)
return f;
int used = ,d = ;
for(int i = head[u];i != -;i = E[i].nxt){
if(dep[u] == dep[E[i].v] - && E[i].w){
if((d = Dfs(E[i].v,min(f - used,E[i].w)))){
used += d;
E[i].w -= d;
E[i^].w += d;
}
}
}
if(!used)
dep[u] = ;
return used;
} int Dinic(){
int max_flow = ,d;
while(Bfs()){
while((d = Dfs(s,inf)))
max_flow += d;
}
return max_flow;
}
signed main(){
//freopen(“in”,“r”,stdin);
ios::sync_with_stdio(false);
cin.tie();
memset(head,-, sizeof(head));
int ans = ,sz = ; cin >> m >> n;
s = ,t = m*n + ;
for(int i = ;i <= m; i++){
for(int j = ;j <= n; j++){
sz++;
cin >> x[i][j];
ans += x[i][j];
if((i+j)%){
insert(s,sz,x[i][j]);//连向源点
if(i > )
insert(sz,sz - n,inf);//把有限制条件的连起来,边权注意要尽量大
if(i < m)
insert(sz,sz + n,inf);
if(j > )
insert(sz,sz - ,inf);
if(j < n)
insert(sz,sz + ,inf); }
else
insert(sz,t,x[i][j]);//连向汇点
}
}
cout << ans - Dinic() << endl;//总的边权-最大流(最小割)
return ;
}
P2774 方格取数(网络流)的更多相关文章
- P2774 方格取数问题 网络流重温
P2774 方格取数问题 这个题目之前写过一次,现在重温还是感觉有点难,可能之前没有理解透彻. 这个题目要求取一定数量的数,并且这些数在方格里面不能相邻,问取完数之后和最大是多少. 这个很好的用了网络 ...
- P2774 方格取数问题 网络流
题目: P2774 方格取数问题 题目背景 none! 题目描述 在一个有 m*n 个方格的棋盘中,每个方格中有一个正整数.现要从方格中取数,使任意 2 个数所在方格没有公共边,且取出的数的总和最大. ...
- P2774 方格取数问题(网络流)
P2774 方格取数问题 emm........仔细一看,这不是最大权闭合子图的题吗! 取一个点$(x,y)$,限制条件是同时取$(x,y+1),(x,y-1),(x+1,y),(x-1,y)$,只不 ...
- P2774 方格取数问题(最小割)
P2774 方格取数问题 一看题目便知是网络流,但由于无法建图.... 题目直说禁止那些条件,这导致我们直接建图做不到,既然如此,我们这是就要逆向思维,他禁止那些边,我们就连那些边. 我们将棋盘染色, ...
- 洛谷 P2774 方格取数问题 解题报告
P2774 方格取数问题 题目背景 none! 题目描述 在一个有 \(m*n\) 个方格的棋盘中,每个方格中有一个正整数.现要从方格中取数,使任意 2 个数所在方格没有公共边,且取出的数的总和最大. ...
- P2774 方格取数问题 网络最大流 割
P2774 方格取数问题:https://www.luogu.org/problemnew/show/P2774 题意: 给定一个矩阵,取出不相邻的数字,使得数字的和最大. 思路: 可以把方格分成两个 ...
- BZOJ 1475: 方格取数( 网络流 )
本来想写道水题....结果调了这么久!就是一个 define 里面少加了个括号 ! 二分图最大点权独立集...黑白染色一下 , 然后建图 : S -> black_node , white_no ...
- [BZOJ1475]方格取数 网络流 最小割
1475: 方格取数 Time Limit: 5 Sec Memory Limit: 64 MBSubmit: 1025 Solved: 512[Submit][Status][Discuss] ...
- P2774 方格取数问题
题目背景 none! 题目描述 在一个有 m*n 个方格的棋盘中,每个方格中有一个正整数.现要从方格中取数,使任意 2 个数所在方格没有公共边,且取出的数的总和最大.试设计一个满足要求的取数算法.对于 ...
随机推荐
- Flink架构(四)- 状态管理
状态管理 之前我们提到过大多数流应用是有状态的.很多operators会不断的访问并更新某中状态,例如一个window中收集了多少条记录,输入源中当前读到的位置,亦或是用户定义的特定operators ...
- 使用 navigator.sendBeacon() 上报数据
http://kaifage.com/notes/76/navigator-sendBeacon.html 如某些统计系统,在页面unload时,如果要上报当前数据,采用xhr的同步上报方式,会阻塞当 ...
- 每天进步一点点------Xilinx DCM
时钟---锁相环 1. Xilinx DCM 数字时钟管理模块(Digital Clock Manager,DCM)是基于Xilinx的其他系列器件所采用的数字延迟锁相环(DLL,Dela ...
- SaltStack自动化软件简介及安装
==================================================================================================== ...
- 通过scrapy,从模拟登录开始爬取知乎的问答数据
这篇文章将讲解如何爬取知乎上面的问答数据. 首先,我们需要知道,想要爬取知乎上面的数据,第一步肯定是登录,所以我们先介绍一下模拟登录: 先说一下我的思路: 1.首先我们需要控制登录的入口,重写star ...
- ThinkPhp5 中Volist标签的用法
Volist标签一般是和内置方法assign()搭配使用,将值从后台传到前台,是当下比较流行的一种传值方法 本文实例讲述了ThinkPHP模板循环输出Volist标签用法.分享给大家供大家参考,具体如 ...
- 类型type:clusterip和service内部的关系
类型type:clusterip和service内部的关系 待办 https://stackoverflow.com/questions/41509439/whats-the-difference-b ...
- Lc626_换座位
626. 换座位 SQL架构 小美是一所中学的信息科技老师,她有一张 seat 座位表,平时用来储存学生名字和与他们相对应的座位 id. 其中纵列的 id 是连续递增的 小美想改变相邻俩学生的座位. ...
- Springboot MongoTemplate
springboot mongodb配置解析 MongoTemplate进行增删改查 mongoTemplate 手把手教springboot访问/操作mongodb(查询.插入.删除) Spring ...
- Spring bean继承
Bean 定义继承 bean 定义可以包含很多的配置信息,包括构造函数的参数,属性值,容器的具体信息例如初始化方法,静态工厂方法名,等等. 子 bean 的定义继承父定义的配置数据.子定义可以根据需要 ...