codevs 1907 方格取数 3

Description

在一个有m*n 个方格的棋盘中,每个方格中有一个正整数。现要从方格中取数,使任意2 个数所在方格没有公共边,且取出的数的总和最大。试设计一个满足要求的取数算法。

Input

第1 行有2 个正整数m和n,分别表示棋盘的行数和列数。接下来的m行,每行有n个正整数,表示棋盘方格中的数。

Output

对于给定的方格棋盘,按照取数要求编程找出总和最大的数,将取数的最大总和输出。

Sample Input

3 3
1 2 3
3 2 3
2 3 1 

Sample Output

11

HINT

n,m<=30

 

  嗯......这道题大概算是自己想出来的第一道网络流的题吧?

  虽然想了很久,WA了很多发,但终于A掉了......

  网络流的题真是难想(但这一题还是比较简单的),如果不是我已经知道这道题要用网络流做,还不知道要想到什么时候去了......

  好了,不扯多了,进正题:

  首先,我们发现直接建模的话非常不好搞,体重的条件不好表示......

  于是,我们就想,是否可以把我们选完数之后剩下的数给表示出来呢?我们发现这个不难做到。只需将棋盘黑白二染色,把黑点、白点各看成一块,相邻的格子间有边相连,不难发现将黑白两块分开的割的方案就是不选的点的合法方案(脑补一下应该可以搞出来)。所以最小割即是合法方案中选出的点和最大的方案。于是我们可以从源点向所有黑(白)点连一条容量为这个格子里的数的边,从黑(白)点向相邻的点连一条容量为INF的边,再从白(黑)点向汇点连一条容量为当前格子里的数的边,跑一边最大流即可得出不选的点的最小和,用所有数字之和减去它就是答案。

  update:其实这就是最大独立集等于总点数减去最大匹配数

  下面贴代码:

 1 #include<iostream>
 2 #include<cstdio>
 3 #include<cstring>
 4 #include<algorithm>
 5 #include<cmath>
 6 #define maxm 100010
 7 #define INF (1<<25)
 8 #define r(j) (j^1)
 9 
10 using namespace std;
11 typedef long long llg;
12 
13 int head[101*101],next[maxm],to[maxm],c[maxm],tt=1;
14 int a[101][101],zx[4]={0,0,1,-1},zy[4]={1,-1,0,0};
15 int d[maxm],l,r,dep[maxm],ans,tut,s,t,n,m;
16 
17 int getint(){
18     int w=0;bool q=0;
19     char c=getchar();
20     while((c>'9'||c<'0')&&c!='-') c=getchar();
21     if(c=='-') q=1,c=getchar();
22     while(c>='0'&&c<='9') w=w*10+c-'0',c=getchar();
23     return q?-w:w;
24 }
25 
26 void link(int x,int y,int z){
27     to[++tt]=y;next[tt]=head[x];head[x]=tt;
28     to[++tt]=x;next[tt]=head[y];head[y]=tt;
29     c[tt^1]=z;
30 }
31 
32 bool bfs(){
33     for(int i=1;i<=t;i++) dep[i]=0;
34     l=r=0;d[r++]=s;dep[s]=1;int u;
35     while(l!=r){
36         u=d[l++];
37         for(int i=head[u];i;i=next[i])
38             if(!dep[to[i]] && c[i]>0){
39                 dep[to[i]]=dep[u]+1;
40                 d[r++]=to[i];
41             }
42     }
43     return dep[t]>0;
44 }
45 
46 int dfs(int u,int low){
47     int res=0,v;
48     if(u==t) return low;
49     if(!low) return 0;
50     for(int i=head[u];i;i=next[i])
51         if(c[i]>0 && dep[to[i]]==dep[u]+1){
52             v=dfs(to[i],min(low-res,c[i]));
53             c[i]-=v;c[r(i)]+=v;res+=v;
54         }
55     return res;
56 }
57 
58 int main(){
59     freopen("a.in","r",stdin);
60     freopen("a.out","w",stdout);
61     n=getint();m=getint();s=n*m+1;t=s+1;
62     for(int i=1;i<=n;i++)
63         for(int j=1;j<=m;j++)
64             a[i][j]=getint();
65     for(int i=1,now(0);i<=n;i++)
66         for(int j=1;j<=m;j++){
67             now++;
68             if(!((i+j)&1)){
69                 link(s,now,a[i][j]);
70                 for(int k=0,x,y,n1;k<4;k++){
71                     x=i+zx[k];y=j+zy[k];
72                     if(x>0 && x<=n && y>0 && y<=m){
73                         n1=(x-1)*m+y;
74                         link(now,n1,INF);
75                     }
76                 }
77             }
78             else link(now,t,a[i][j]);
79             tut+=a[i][j];
80         }
81     while(bfs())
82         while(int tot=dfs(s,INF)) ans+=tot;
83     printf("%d\n",tut-ans);
84     return 0;
85 }

转载于:https://www.cnblogs.com/lcf-2000/p/5551356.html

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

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

相关文章

APP应用 HTTP/1.0中keep-alive

在HTTP/1.0中keep-alive不是标准协议&#xff0c;客户端必须发送Connection:Keep-Alive来激活keep-alive连接。https://www.imooc.com/article/31231HTTP协议是无状态的协议&#xff0c;即每一次请求都是互相独立的。因此它的最初实现是&#xff0c;每一个http请求都会打开一个…

mysql 日期滞后_如何滞后MySQL中的列?

要在MySQL中滞后一列&#xff0c;首先让我们创建一个表。创建表的查询如下-mysql> create table LagDemo-> (-> UserId int,-> UserValue int-> );示例使用insert命令在表中插入一些记录。查询如下-mysql> insert into LagDemo values(12,158);mysql> ins…

oracle高效分页查询总结

本文参考链接&#xff1a;http://blog.sina.com.cn/s/blog_8604ca230100vro9.html 探索查询语句&#xff1a; --分页参数&#xff1a;size 20 page 2 --没有order by的查询 -- 嵌套子查询&#xff0c;两次筛选&#xff08;推荐使用&#xff09; --SELECT * -- FROM (SELECT R…

18124 N皇后问题

18124 N皇后问题 时间限制:2000MS 内存限制:65535K提交次数:0 通过次数:0 题型: 编程题 语言: G;GCC;VC Description 有N*N的国际象棋棋盘&#xff0c;要求在上面放N个皇后&#xff0c;要求任意两个皇后不会互杀&#xff0c;有多少种不同的放法&#xff1f; 输入格式 每一个…

ux设计师怎样找同类产品_没有预算? 别找借口。 便宜的UX上的UX 2:让我们开始构建。...

ux设计师怎样找同类产品by Vinny文尼 没有预算&#xff1f; 别找借口。 便宜的UX上的UX 2&#xff1a;让我们开始构建。 (No budget? No excuse. UX on the cheap Part 2: let’s get building.) This is a continuation of my series on ‘UX on a Budget’. If you haven’…

巨蟒python全栈开发-第6天 is==

1.小数据池 2.id 3.decode和encode 小数据池 #小数据池:不要死磕就行#python为了简化,搞出来的一个东西ID (1)# id()函数可以帮我们查看一个变量的内存地址# a10# b30# c10# print(id(a)) #1712876864# print(id(b)) #1712877504# print(id(c)) #1712876864(2)# lst[周…

安装mysql8._安装MySQL8(附详细图文)

安装MySQL8(附详细图文)删除mysql服务&#xff1a;mysqld -remove mysql1、下载 mysql 8下载地址&#xff1a;https://dev.mysql.com/downloads/mysql/2、配置 mysql 配置文件打开 mysql 8 的安装目录&#xff1a;my.ini注意设置自己对应的 mysql 安装目录 和数据存放目录[mysq…

win10安装windows live writer 错误:OnCatalogResult:0x80190194

到官网下载了一个在线安装程序&#xff0c;可是一运行就提示无法安装&#xff0c;显式错误“OnCatalogResult:0x80190194”&#xff0c;如下图所示 找到windows live安装程序的安装日志文件。具体位置是&#xff1a;C:\Users\All Users\Microsoft\WLSetup\Logs 需要下载安装文件…

C# 实现一个可取消的多线程操作 示例

private void button1_Click(object sender, EventArgs e){//定义一个为可取消资源标志CancellationTokenSource cts new CancellationTokenSource();//定义二个为可取消资源标志CancellationTokenSource cts1 new CancellationTokenSource();//实现一个可取消操作的回调函数…

这些工具将提高您的Android生产率

by Michal Bialas由Michal Bialas 这些工具将提高您的Android生产率 (These tools will boost your Android productivity) The main purpose of this post is to list and describe tools (mainly free ones), which allow you to boost your productivity, efficiency, and …

python四位玫瑰数的解题思路_入门python知识点总结以及15道题的解题思路分析

知识点总结python1、序列app操做符idex in s 若是x是列表s的元素&#xff0c;返回True&#xff0c;不然Falses t 链接两个序列s和ts*n或者n*s 将序列s复制n次s[i] 返回s中第i元素s[i:j]或s[i:j: k] 切片&#xff0c;返回序列s中第i到j-1以k为步长的元素子序列函数函数len(s) 返…

TZOJ--5480: 孤衾易暖 // POJ--3735 Training little cats (矩阵快速幂)

5480: 孤衾易暖 时间限制(普通/Java):1000MS/3000MS 内存限制:65536KByte 描述 哇&#xff0c;好难&#xff0c;我要放弃了(扶我起来&#xff0c;我还能A 寒夜纵长&#xff0c;孤衾易暖&#xff0c;钟鼓渐清圆。 生活也许有些不如意的地方&#xff0c;但是没有什么是拥有一…

IntelliJ IDEA2017 修改缓存文件的路径

IDEA的缓存文件夹.IntelliJIdea2017.1&#xff0c;存放着IDEA的破解密码&#xff0c;各个项目的缓存&#xff0c;默认是在C盘的用户目录下&#xff0c;目前有1.5G大小。现在想要把它从C盘移出。 在IDEA的安装路径下中&#xff0c;进入bin目录后找到属性文件&#xff1a;idea.pr…

解决iphone填写表单时,表单项获取焦点时往下拉屏,导致顶部标题栏下滑错位...

$(function () {//解决iphone填写表单时&#xff0c;表单项获取焦点时往下拉屏&#xff0c;导致顶部标题栏下滑错位var u navigator.userAgent;var isiOS !!u.match(/\(i[^;];( U;)? CPU.Mac OS X/); //ios终端if (isiOS true) {var pageHeight window.innerHeight;$(&quo…

aws cognito_AWS Cognito的用户管理—(2/3)核心功能

aws cognitoby Kangze Huang黄康泽 AWS Cognito的用户管理—(2/3)核心功能 (User Management with AWS Cognito — (2/3) The Core Functionality) 完整的AWS Web样板-教程1B (The Complete AWS Web Boilerplate — Tutorial 1B) Main Table of Contents Click Here主要目录请…

python字符串后面添加字符串_什么是字符串?怎样在Python中添加字符串?

字符串是一种表示文本的数据类型&#xff0c;字符串中的字符可以是ASCII字符、各种符号以及各种Unicode字符。Python中的字符串有如下三种表现方式。第1种方式&#xff1a;使用单引号包含字符。示例代码如下&#xff1a;a 123注意&#xff0c;单引号表示的字符串里不能包含单引…

surround360

1.读入配置文件2.创建底部和顶部投影线程3.将侧面图投影到球座标(1)load侧面相机图像(2)创建投影线程(3)等待线程结束4.渲染立体全景图(侧边)(1)计算重叠区域宽度(2)创建准备生成新视图的线程: 送入相邻两个相机的投影图,计算光流flowLtoR,flowRtoL, 保存在novelViewGenerators…

snapchat_我刚刚在Snapchat获得开发人员职位。

snapchatby Jon Deng乔恩邓 我刚刚在Snapchat获得开发人员职位。 这是我学到的东西&#xff0c;以及它如何帮助您进行求职。 (I just got a developer job at Snapchat. Here’s what I learned and how it can help you with your job search.) About a year ago, while depl…

sys.argv

import sysi0 print len(sys.argv) while i < len(sys.argv):print sys.argv[%d]:%s %(i,sys.argv[i])i i1 import sysprint len(sys.argv) for i in range(len(sys.argv)):print sys.argv[%d]:%s %(i,sys.argv[i]) 执行 结果 &#xff1a;E:\MyScript>python sysargs.py…

Docker安装java-Zookeeper进行操作

Docker安装Zookeeper下载Zookeeper镜像 docker pull zookeeper启动容器并添加映射 docker run --privilegedtrue -d --name zookeeper --publish 2181:2181 -d zookeeper:latest 查看容器是否启动 docker ps idea提供了一个Zookeeper插件&#xff0c;以供连接Zookeeper服务中心…