P2774-方格取数问题【网络流,最大流,最小割】

正题

链接:
https://www.luogu.org/problemnew/show/P2774


题意

在一个n*m的数字矩阵中取数,取得数不能相邻,求能取到的最大价值。


解题思路

最大价值,那么反着去想,就是取若干个格子,让所有格子的都不相邻,要求权最小,那么就是最小割问题。然后二分建图。起点与奇数点连容量为该点价值的边,偶数点与终点连容量为该点价值的边,然后相邻的连一条容量无限的边,这样就不会割去这条边,然后所有的权值和减去最小割就是答案。


代码

#include<cstdio>
#include<algorithm>
#include<iostream>
#include<cstring>
#include<queue>
using namespace std;
const int dx[4]={0,0,1,-1},dy[4]={1,-1,0,0};
struct line{int to,next,c;
}a[200001];
queue<int>f;//队列
int n,d[10055],s,e,m,answ,w,tot,ls[10055];
void addl(int x,int y,int z)//加边
{a[++tot].to=y;a[tot].next=ls[x];a[tot].c=z;ls[x]=tot;
}
bool bfs()//在残量网上建分层图
{memset(d,0,sizeof(d));d[s]=1;f.push(s);while (!f.empty()){int x=f.front();for (int i=ls[x];i>=0;i=a[i].next){int y=a[i].to;if (a[i].c>0 && d[y]==0){d[y]=d[x]+1;f.push(y);}}f.pop();}if (d[e]) return true;else return false;
}
int dinic(int x,int flow)//求最大流
{int rest=0,k;if (x==e) return flow;for (int i=ls[x];i>=0;i=a[i].next){int y=a[i].to;if (a[i].c>0&&d[y]==d[x]+1&&flow>rest){rest+=(k=(dinic(y,min(flow-rest,a[i].c))));a[i].c-=k;a[i^1].c+=k;}}if (!rest) d[x]=0;return rest;
}
int ansq()
{int sum=0;while (bfs()) sum+=dinic(s,2147483647);//统计值return sum;
}
int main()
{int x;tot=-1;scanf("%d%d",&n,&m);s=0;e=n*m+1;memset(ls,-1,sizeof(ls));for (int i=1;i<=n;i++)for (int j=1;j<=m;j++){scanf("%d",&w);answ+=w;int num=(i-1)*m+j;//连边if ((i+j)&1) addl(s,num,w),addl(num,s,0);else addl(num,e,w),addl(e,num,0);} for (int i=1;i<=n;i++)for (int j=1;j<=m;j++)if ((i+j)&1){for (int k=0;k<4;k++){int x1=i+dx[k],y1=j+dy[k];//相邻连边if (x1<=0 || x1>n || y1<=0 || y1>m) continue;int num=(i-1)*m+j;addl(num,(x1-1)*m+y1,2147483647);addl((x1-1)*m+y1,num,0);}}printf("%d",answ-ansq());//输出
}

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

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

相关文章

.NET Core引入性能分析引导优化

“性能分析引导优化&#xff08;Profile Guided Optimization&#xff0c;缩写PGO&#xff09;”是一项原生编译技术&#xff0c;可用于生成高度优化的代码。它通过一个两步编译过程实现优化——用第一步记录相关执行信息&#xff0c;然后第二步用那些信息构建一个改进过的二进…

Linux查找含有某字符串的所有文件

转载自 Linux查找含有某字符串的所有文件 1、grep查找 grep -rl "hello,world!" * * : 表示当前目录所有文件&#xff0c;也可以是某个文件名 -r 是递归查找 -n 是显示行号 -R 查找所有文件包含子目录 -i 忽略大小写 下面是一些有意思的命令行参数&#xff…

手把手教你搭建Maven项目

大家好&#xff0c;我是雄雄&#xff0c;欢迎关注微信公众号【雄雄的小课堂】。今天给大家分享的是“手把手教你买基金”&#xff0c;奥&#xff01;&#xff01;不对&#xff0c;不好意思&#xff0c;是“手把手教你使用idea搭建Maven项目”&#xff01;前言大家都知道&#x…

P1306-斐波那契公约数【矩阵乘法,数论】

正题 题目链接&#xff1a; https://www.luogu.org/problemnew/show/P1306 题目大意 求出第x项和第y项斐波那契额数的最大公约数。 解题思路 首先第x项和第y项斐波那契额数的最大公约数就是第gcd(x,y)项斐波那契额数。 但是样例还是很大&#xff0c;于是就得用矩阵乘法加速…

实例!使用Idea创建SSM框架的Maven项目

大家好&#xff0c;我是雄雄&#xff0c;欢迎关注微信公众号【雄雄的小课堂】。前言书接前文&#xff0c;昨天带着大家下载且配置了maven&#xff0c;以及在idea中创建maven项目&#xff0c;今天&#xff0c;我们就结合ssm框架&#xff0c;在idea中实现一个增删改查案例。昨天的…

Spring MVC的GET与POST请求url-pattern坑

一、坑现象复现 1、web.xml <?xml version"1.0" encoding"UTF-8"?> <web-app xmlns"http://java.sun.com/xml/ns/javaee"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://java.sun…

P1801-黑匣子_NOI导刊2010提高【堆】

正题 题目链接&#xff1a; https://www.luogu.org/problemnew/show/P1801 大意 有两种操作&#xff0c; 1.将一个数放入黑匣子中 2.i之后查询第i小的数&#xff08;初始为i&#xff09; 解题思路 维护两个堆&#xff0c;一个是比第i小的数大的数的最小堆&#xff0c;一个…

如何给你的Idea换一个好看漂亮的主题

大家好&#xff0c;我是雄雄&#xff0c;欢迎关注微信公众号【雄雄的小课堂】。前言大家都知道&#xff0c;idea里面自带两种主题样式&#xff0c;一种是灰色的&#xff0c;另一种是黑色的。你有没有想过换个其他的主题颜色用用呢&#xff1f;如果想&#xff0c;那么今天&#…

腾讯游戏使用Microsoft Service Fabric案例

本文转载自公众号-云就该这么玩&#xff0c;微软官方的地址链接&#xff1a;https://customers.microsoft.com/en-us/story/tencent-telecommunications-azure-service-fabric-windows-server-en 根据研究公司Newzoo的报告估计&#xff0c;全球游戏收入在2017年将达到1080亿美…

div中的table内容过多时不超出div的范围解决方法

转载自 div中的table内容过多时不超出div的范围解决方法 问题描述&#xff1a; 在做界面展示时&#xff0c;table的内容过多&#xff0c;超出div的大小&#xff0c;看着table的边框盖过了div的边框&#xff0c;不美观。 问题解决&#xff1a; 因为页面整体的布局美工都设计…

P2278-[HNOI2003]操作系统【堆】

正题 题目链接&#xff1a; https://www.luogu.org/problemnew/show/P2278 题意 有若干个进程&#xff0c;每个进程有优先级&#xff0c;运行时间&#xff0c;放入时间。 如果一个进程到达的时候CPU是空闲的&#xff0c;则它会一直占用CPU直到该进程结束。除非在这个过程中…

属性编辑器未在PropertyEditorManager中注册?

大家好&#xff0c;我是雄雄&#xff0c;欢迎关注微信公众号【雄雄的小课堂】。前言好不容易将代码都写完了&#xff0c;结果一运行&#xff0c;报错&#xff01;&#xff01;HTTP Status 500 - Unable to convert string "${book.btime}" to class "java.util.…

DDD理论学习系列(13)-- 模块

1. 引言 Module&#xff0c;即模块&#xff0c;是指提供特定功能的相对独立的单元。提到模块&#xff0c;你肯定就会想到模块化设计思想&#xff0c;也就是功能的分解和组合。对于简单问题&#xff0c;可以直接构建单一模块的程序。而对于复杂问题&#xff0c;则可以先创建若干…

POJ2352-Stars【树状数组】

正题 题目链接: http://poj.org/problem?id2352 题意 有n个坐标不同的星星&#xff0c;一个星星的等级等于在它左下的所有星星数量&#xff0c;求各个等级的星星数。 注&#xff1a;输入顺序保证Y坐标是升序&#xff0c;Y坐标相同的情况下X坐标也是升序的。 解题思路 用树…

html的<input type='radio'/>change事件坑

一、坑复现 <div><input typeradio nametest value1 checked/>1<span idtest_a>a test </span ></div> <div><input typeradio nametest value2/>2<span idtest_b>b test </span ></div> $(name"test"…

快速搭建Springboot项目的两种方式!!

大家好&#xff0c;我是雄雄&#xff0c;欢迎关注微信公众号【雄雄的小课堂】。前言Springboot的特点就是简单、快速和方便&#xff0c;使用idea不到一分钟就可以快速搭建springboot项目&#xff0c;并且&#xff0c;在这里&#xff0c;你不用写spring的那些乱七八糟的xml文件&…