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 个数所在方格没有公共边,且取出的数的总和最大.试设计一个满足要求的取数算法.对于 ...
随机推荐
- RegExp-dotAll
//.不能匹配四个字节的utf16字符和行终止符\n,\r console.log(/foo.bar/.test('foo\nbar')) //false //dotAll console.log(/ ...
- web开发中 前端模板->JavaScript->Controller->JavaScript相应 的交互方式
首先画张图了解当下流行的phpweb 数据交互套路: 1,模板与JavaScript的交互 给HTML标签赋予onlick事件,点击后触发js方法,jQuery收集页面信息,分析信息. 2,js与co ...
- SpringMVC开发RESTful接口
概念: 什么是REST? REST是Representational State Transfer的缩写.翻译为"表现层状态转化",restful是一种接口设计风格,它不是一个协议 ...
- C/C++内存四区
内存模型图 32位CPU可寻址4G线性空间,每个进程都有各自独立的4G逻辑地址,其中0~3G是用户态空间,3~4G是内核空间,不同进程相同的逻辑地址会映射到不同的物理地址中.其逻辑地址其划分如下: 各 ...
- CentOS 7 下挂载NTFS盘及开机自动挂载
一.工具 NTFS-3G 二.安装2种安装方式 2.1.yum安装 yum install NTFS* 2.2.编译安装 下载 解压 wget https://tuxera.com/opensourc ...
- IIS的部署(二)------虚拟目录的使用
IIS的虚拟目录 一个站点的网页的存储位置目录是固定的,而且结构和物理保存网页的磁盘路径相同.例如:默认网页的存储位置是c:\inetpub\wwwroot,当访问localhost即访问c:\ine ...
- Java-POJ1002-487-3279(含c++代码)
Java 的读入还不熟练,解决不了空行的问题,还是只能用c++ A掉,唉~ 之后要把这个坑补掉 解决了,开心(*^▽^*)以下是AC的Java代码 以下是C++代码 #include<cstdi ...
- 版本控制gitlab
目录 1. 版本控制介绍 2. gitlab部署 3. gitlab管理 1. 版本控制介绍 版本控制是指对软件开发过程中各种程序代码.配置文件及说明文档等文件变更的管理,是软件配置管理的核心思想之一 ...
- 【 SSH 整合】Spring、Struts、Hibernate基本整合
applicationContext.xml <?xml version="1.0" encoding="UTF-8"?> <beans xm ...
- python换源
pip源的更新 引用自:PyPI使用国内源 # coding: utf-8 import platform import os os_type = platform.system() if " ...