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 个数所在方格没有公共边,且取出的数的总和最大.试设计一个满足要求的取数算法.对于 ...
随机推荐
- 编写自定义的django-admin命令
先写标题内容后续补充上 官方文档如下 :http://python.usyiyi.cn/documents/django_182/howto/custom-management-commands.ht ...
- Web 安全工具篇:Burp Suite 使用指南
真的是一点都不过分,了解详情请继续往下读. Burp Suite 介绍 Burp Suite 是用于攻击 web 应用程序的集成平台.它包含了许多工具,并为这些工具设计了许多接口,以促进加快攻击应用程 ...
- python中pip问题
1.在cmd中运行pip命令显示‘pip命令显示不是内部或外部命令,也不是可运行的程序或批处理文件’的问题 先看python的安装目录下Script文件夹中pip3.exe有没有缺失 如果没有在cmd ...
- 关于Sublime如何配置C++环境的问题
前言 传说sublime是全球最好的编辑器,可是只是编辑器啊!!!如果要运行,对于我们这些蒟蒻来说,不得不去使用DEV_C++.我们总是幻想能让sublime变成一个轻量级IDE,那该多好啊!!! 那 ...
- Java进阶学习(4)之继承与多态(上)
继承 媒体资料库的设计 代码复制是质量不良的表现 不具有可扩展性和可维护性 继承 子类父类关系 子类继承了什么 先定义初始化,后构造器 子类和父类的关系 子类有变量和父类变量相同时,父类变量隐藏 父类 ...
- 概率dp poj 2151
题意: 这道题目的意思很简单,有t个ACM队,m个题目,题目给出了每个队对每个题目做出的概率大小(0到1之间,包含0和1),要求每个队至少做出一道题(签到题),同时,要求获胜队必须至少能够做出n道题( ...
- 概率dp poj2096
/** dp求期望的题. 题意:一个软件有s个子系统,会产生n种bug. 某人一天发现一个bug,这个bug属于某种bug,发生在某个子系统中. 求找到所有的n种bug,且每个子系统都找到bug,这样 ...
- springboot+mybatis报错Invalid bound statement (not found)
今天做项目时报了一个错提示说Invalid bound statement (not found),也就是说mapper接口绑定.xml文件出错了,找不到指定的sql:原因是程序没有把.xml文件编译 ...
- 瀑布流无限加载infinitescroll插件与masonry插件使用
masonry官网地址http://masonry.desandro.com/,infinitescroll官网地址http://www.infinite-scroll.com/ 无限滚动原理:无限滚 ...
- webpack初学踩坑记
注意事项: 1. webpack不用装在全局环境下,在哪个项目中使用,就安装在该项目下即可 1. 问题一:npm init 初始化一个项目后,添加webpack.config.js文件,在该项目中通过 ...