方格取数(网络流)

题目链接:ヾ(≧∇≦*)ゝ

大致题意:给你一个\(n*m\)的矩阵,可以取任意多个数,但若你取了一个数,那么这个数上下左右的数你就都不能取,问能取到的最大值是多少。

Solution:

首先,我们可以把矩阵上的点都染成两种颜色(第一个点为黑色,它会影响的点为白色,这样做下去)。

那么我们就可以得到一个二分图,此时我们注意到,我们要做的是把这个二分图按照冲突关系分为两个点集且要最优。

再结合数据范围,算法就很显然了。网络流最小割

具体建图步骤:

源点与所有的黑点连边,容量为该点点权,白点与汇点连边,容量为该点点权。

再把所有的黑点和与该黑点产生冲突的白点连边,容量为inf

这样我们得到的最小割就是满足条件的需要舍弃的最小值。答案就是全部值-舍弃值。

最后再根据最小割=最大流这一性质,就能很快的做出此题了

需要注意的是,此题为\(m\)\(n\)

Code:

#include<queue>
#include<cstdio>
#include<ctype.h>
#include<cstring>
#include<algorithm>
#define N 40001
#define inf 1926081700
using namespace std;
int dx[4]={0,1,0,-1};
int dy[4]={1,0,-1,0};
int n,m,mp[101][101];
int S,T,ans,cnt=1,head[N/4+11];
struct Edge{int nxt,to,val;}edge[N*2+9];
void ins(int x,int y,int z){edge[++cnt].nxt=head[x];edge[cnt].to=y;edge[cnt].val=z;head[x]=cnt;
}
namespace Network_Flow{queue<int> q;int maxflow,dep[N/4+11];int bfs(){memset(dep,0,sizeof(dep));q.push(S);dep[S]=1;while(!q.empty()){int x=q.front();q.pop();for(int i=head[x];i;i=edge[i].nxt){int y=edge[i].to;if(edge[i].val&&!dep[y]){dep[y]=dep[x]+1;q.push(y);}}}return dep[T];}int dfs(int x,int rest){if(x==T||rest<=0) return rest;int flow=0;for(int i=head[x];i;i=edge[i].nxt){int y=edge[i].to,v=edge[i].val;if(dep[y]==dep[x]+1){int now=dfs(y,min(rest,v));edge[i].val-=now;edge[i^1].val+=now;flow+=now;rest-=now;if(rest<=0) break;}}return flow;}int dinic(){while(bfs()) maxflow+=dfs(S,inf);return maxflow;}
}
int num(int x,int y){return (x-1)*n+y;}
void Ins(int x,int y){for(int i=0;i<4;i++){int nx=x+dx[i],ny=y+dy[i];if(nx>0&&nx<=m&&ny>0&&ny<=n){ins(num(x,y),num(nx,ny),inf);ins(num(nx,ny),num(x,y),0);}}
}
int read(){int x=0,f=1;char ch=getchar();while(!isdigit(ch)){if(ch=='-')f=-f;ch=getchar();}while(isdigit(ch)){x=x*10+ch-48;ch=getchar();}return x*f;
}
int main(){m=read(),n=read();S=n*m+1;T=S+1;using namespace Network_Flow;for(int i=1;i<=m;i++)for(int j=1;j<=n;j++)mp[i][j]=read(),ans+=mp[i][j];for(int i=1;i<=m;i++)for(int j=1;j<=n;j++)if(!((i+j)%2)){ins(S,num(i,j),mp[i][j]);ins(num(i,j),S,0);Ins(i,j);}else{ins(num(i,j),T,mp[i][j]);ins(T,num(i,j),0);}printf("%d",ans-dinic());return 0;
}

转载于:https://www.cnblogs.com/NLDQY/p/10338336.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/395249.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

mysql创建的数据库都在哪里看_mysql 怎么查看创建的数据库和表

1、 //看当前使用的是哪个数据库 ,如果你还没选择任何数据库&#xff0c;结果是NULL。mysql>select database(); ------------ | DATABASE() | ------------ | menagerie | ------------2、//查看有哪些数据库 mysql> show databases;--------------------| Database …

wordpress 基础文件

需要用到的PHP基础文件有&#xff1a; 404.php404模板 rtl.css 如果网站的阅读方向是自右向左的&#xff0c;会被自动包含进来comments.php 评论模板single.php文章模板。显示单独的一篇文章时被调用&#xff0c;如果模板不存在会使用 index.phpsingle-<post-type>.php自…

ajax请求 apend,jsp如何获取ajax append的数据?

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼我在网上下了个上传图片的js&#xff0c;我想上传图片的时候还提交一些参数&#xff0c;但是后台用request.getParameter("th");获取出来是nullfunction uploadSubmitHandler () {if (state.fileBatch.length ! 0) {var …

linux 机器格式化_为什么机器人应该为我们格式化代码

linux 机器格式化by Artem Sapegin通过Artem Sapegin 为什么机器人应该为我们格式化代码 (Why robots should format our code for us) I used to think that a personal code style is a good thing for a programmer. It shows you are a mature developer who knows what g…

Pytest高级进阶之Fixture

From: https://www.jianshu.com/p/54b0f4016300 一. fixture介绍 fixture是pytest的一个闪光点&#xff0c;pytest要精通怎么能不学习fixture呢&#xff1f;跟着我一起深入学习fixture吧。其实unittest和nose都支持fixture&#xff0c;但是pytest做得更炫。 fixture是pytest特有…

mysql 慢日志报警_一则MySQL慢日志监控误报的问题分析

之前因为各种原因&#xff0c;有些报警没有引起重视&#xff0c;最近放假马上排除了一些潜在的人为原因&#xff0c;发现数据库的慢日志报警有些奇怪&#xff0c;主要表现是慢日志报警不属实&#xff0c;收到报警的即时通信提醒后&#xff0c;隔一会去数据库里面去排查&#xf…

用css实现自定义虚线边框

开发产品功能的时候ui往往会给出虚线边框的效果图&#xff0c;于是乎&#xff0c;我们往往第一时间想到的是用css里的border&#xff0c;可是border里一般就提供两种效果&#xff0c;dashed或者dotted&#xff0c;ui这时就不满意了&#xff0c;说虚线太密了。废话不多说&#x…

无限复活服务器,绝地求生无限复活模式怎么玩 无限复活新手教程

相信不少的绝地求生玩家们最近都听说了其无限复活模式吧?因此肯定想要知道这种模式究竟该怎么玩&#xff0c;所以下面就来为各位带来此玩法的攻略相关&#xff0c;希望各位在看了如下的内容之后恩呢狗狗了解到新手教程攻略一览。“War”模式的设定以及玩法规则如下&#xff1a…

lua math.random()

math.random([n [,m]]) 用法&#xff1a;1.无参调用&#xff0c;产生[0, 1)之间的浮点随机数。 2.一个参数n&#xff0c;产生[1, n]之间的整数。 3.两个参数&#xff0c;产生[n, m]之间的整数。 math.randomseed(n) 用法&#xff1a;接收一个整数n作为随即序列的种子。 例&…

零基础学习ruby_学习Ruby:从零到英雄

零基础学习ruby“Ruby is simple in appearance, but is very complex inside, just like our human body.” — Matz, creator of the Ruby programming language“ Ruby的外观很简单&#xff0c;但是内部却非常复杂&#xff0c;就像我们的人体一样。” — Matz &#xff0c;R…

windows同时启动多个微信

1、创建mychat.bat文件(文件名任意)&#xff0c;输入以下代码&#xff0c;其中"C:\Program Files (x86)\Tencent\WeChat\"为微信的安装路径。以下示例为同时启动两个微信 start/d "C:\Program Files (x86)\Tencent\WeChat\" Wechat.exe start/d "C:\P…

mysql date time year_YEAR、DATE、TIME、DATETIME和TIMESTAMP详细介绍[MySQL数据类型]

为了方便在数据库中存储日期和时间&#xff0c;MySQL提供了表示日期和时间的数据类型&#xff0c;分别是YEAR、DATE、TIME、DATETIME和TIMESTAMP。下面列举了这些MSL中日期和时间数据类型所对应的字节数、取值范围、日期格式以及零值。从上图中可以看出&#xff0c;每种日期和时…

九度oj 题目1380:lucky number

题目描述&#xff1a;每个人有自己的lucky number&#xff0c;小A也一样。不过他的lucky number定义不一样。他认为一个序列中某些数出现的次数为n的话&#xff0c;都是他的lucky number。但是&#xff0c;现在这个序列很大&#xff0c;他无法快速找到所有lucky number。既然这…

安装Tengine

1.安装VMware2.安装CentOS6.53.配置网络a.修改 /etc/sysconfig/network-scripts/ifcfg-eth0配置文件,添加如下内容DEVICEeth0HWADDR00:0C:29:96:01:6BTYPEEthernetUUID41cbd943-024b-4341-ac7a-e4d2142b4938ONBOOTyesNM_CONTROLLEDyesBOOTPROTOnoneIPADDRxxx.xxx.x.xxx#例如:IP…

node seneca_使用Node.js和Seneca编写国际象棋微服务,第2部分

node seneca处理新需求而无需重构 (Handling new requirements without refactoring) Part 1 of this series talked about defining and calling microservices using Seneca. A handful of services were created to return all legal moves of a lone chess piece on a ches…

【OCR技术系列之八】端到端不定长文本识别CRNN代码实现

CRNN是OCR领域非常经典且被广泛使用的识别算法&#xff0c;其理论基础可以参考我上一篇文章&#xff0c;本文将着重讲解CRNN代码实现过程以及识别效果。 数据处理 利用图像处理技术我们手工大批量生成文字图像&#xff0c;一共360万张图像样本&#xff0c;效果如下&#xff1a;…

mysql 修改字段类型死锁_mysql数据库死锁的产生原因及解决办法

数据库和操作系统一样&#xff0c;是一个多用户使用的共享资源。当多个用户并发地存取数据 时&#xff0c;在数据库中就会产生多个事务同时存取同一数据的情况。若对并发操作不加控制就可能会读取和存储不正确的数据&#xff0c;破坏数据库的一致性。加锁是实现数据库并 发控制…

openwrt无盘服务器,搭建基于 OpenWrt/gPXE/iSCSI 的 Windows 无盘工作站

本文要介绍的是如何在 OpenWrt 平台上面搭建无盘工作站服务器以及 Windows 的 iSCSI 部署。当然&#xff0c;由于 OpenWrt 也可以算得上一种 Linux 发行版了&#xff0c;所以本文所介绍的一些方法&#xff0c;在其它 Linux 发行版上面仍有一定的参考价值。整个过程大概分为以下…

Ralink5350开发环境搭建

一、安装虚拟机(Oracle VM VirtualBox 或 VMware Workstation) 二、在虚拟机中安装linux操作系统&#xff08;当前使用的是Ubuntu1204桌面版&#xff09; 三、配置linux相关服务 安装、配置、启动ftp服务apt-get install vsftpd 改动 vsftpd 的配置文件 /etc/vsftpd.conf,将以…

figma下载_Figma重新构想的团队库

figma下载一个新的&#xff0c;功能更强大的界面&#xff0c;用于在整个组织中共享组件 (A new, more powerful interface for sharing Components across your organization) The Team Library in Figma is a set of shared Components across all files in a Team. Component…