bzoj2127happiness(最小割)
一眼最小割。
一种比较好想的建图方式如下:
连源点表示学文,连汇点表示学理,然后adde(S,id(i,j),a[i][j]),adde(id(i,j),T,b[i][j]);对于相邻座位选择同一科的情况,建立新节点,然后若学文,则新点向T连一条流量为价值的边,然后两名同学向该点连接流量为inf的边。学理也是类似的。
#include<cstdio>
#include<algorithm>
#include<cstring>
#define FOR(x,y) for(int i=1;i<=x;i++)for(int j=1;j<=y;j++)
const int N=,M=3e5+;
using namespace std;
int n,m,T,cnt,tot,ans,hd[N],lv[N],q[N],v[M],nxt[M],w[M];
void adde(int x,int y,int z)
{
v[++cnt]=y,w[cnt]=z,nxt[cnt]=hd[x],hd[x]=cnt;
v[++cnt]=x,w[cnt]=,nxt[cnt]=hd[y],hd[y]=cnt;
}
bool bfs()
{
int qs=,qe=;
memset(q,,sizeof q);
memset(lv,,sizeof lv);
q[]=,lv[]=;
while(qs<qe)
{
int u=q[qs++];
if(u==T)break;
for(int i=hd[u];i;i=nxt[i])
if(w[i]&&!lv[v[i]]){lv[v[i]]=lv[u]+;q[qe++]=v[i];}
}
if(lv[T])return ;return ;
}
int dfs(int u,int low)
{
if(u==T||!low)return low;
int sum=;
for(int i=hd[u];i;i=nxt[i])
if(w[i]&&lv[v[i]]==lv[u]+)
{
int tmp=dfs(v[i],min(w[i],low));
sum+=tmp,low-=tmp,w[i]-=tmp,w[i^]+=tmp;
if(!low)return sum;
}
if(low)lv[u]=-;
return sum;
}
int id(int x,int y){return(x-)*m+y;}
int main()
{
scanf("%d%d",&n,&m);
T=*n*m+,cnt=,tot=n*m;
int x;
FOR(n,m)scanf("%d",&x),adde(,id(i,j),x),ans+=x;
FOR(n,m)scanf("%d",&x),adde(id(i,j),T,x),ans+=x;
FOR(n-,m)
scanf("%d",&x),tot++,adde(,tot,x),adde(tot,id(i,j),1e9),adde(tot,id(i+,j),1e9),ans+=x;
FOR(n-,m)
scanf("%d",&x),tot++,adde(tot,T,x),adde(id(i,j),tot,1e9),adde(id(i+,j),tot,1e9),ans+=x;
FOR(n,m-)
scanf("%d",&x),tot++,adde(,tot,x),adde(tot,id(i,j),1e9),adde(tot,id(i,j+),1e9),ans+=x;
FOR(n,m-)
scanf("%d",&x),tot++,adde(tot,T,x),adde(id(i,j),tot,1e9),adde(id(i,j+),tot,1e9),ans+=x;
while(bfs())ans-=dfs(,1e9);
printf("%d",ans);
}
bzoj2127happiness(最小割)的更多相关文章
- BZOJ2127happiness——最小割
题目描述 高一一班的座位表是个n*m的矩阵,经过一个学期的相处,每个同学和前后左右相邻的同学互相成为了好朋友.这学期要分文理科了,每个同学对于选择文科与理科有着自己的喜悦值,而一对好朋友如果能同时选文 ...
- BZOJ-2127-happiness(最小割)
2127: happiness(题解) Time Limit: 51 Sec Memory Limit: 259 MBSubmit: 1806 Solved: 875 Description 高一 ...
- BZOJ2132 圈地计划 【最小割】
题目 最近房地产商GDOI(Group of Dumbbells Or Idiots)从NOI(Nuts Old Idiots)手中得到了一块开发土地.据了解, 这块土地是一块矩形的区域,可以纵横划分 ...
- BZOJ 1391: [Ceoi2008]order [最小割]
1391: [Ceoi2008]order Time Limit: 10 Sec Memory Limit: 64 MBSubmit: 1509 Solved: 460[Submit][Statu ...
- BZOJ-2561-最小生成树 题解(最小割)
2561: 最小生成树(题解) Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 1628 Solved: 786 传送门:http://www.lyd ...
- BZOJ3438 小M的作物(最小割)
题目 Source http://www.lydsy.com/JudgeOnline/problem.php?id=3438 Description 小M在MC里开辟了两块巨大的耕地A和B(你可以认为 ...
- 最大流-最小割 MAXFLOW-MINCUT ISAP
简单的叙述就不必了. 对于一个图,我们要找最大流,对于基于增广路径的算法,首先必须要建立反向边. 反向边的正确性: 我努力查找了许多资料,都没有找到理论上关于反向边正确性的证明. 但事实上,我们不难理 ...
- bzoj1412最小割
太羞耻了,m n写反了(主要是样例n m相等) 建图方法比较高(ji)端(chu),对于可以加栅栏的地方连上1的边,然后求最小割即可 为了让代码优(suo)美(duan),我写了一个check,避免多 ...
- 【BZOJ1497】[NOI2006]最大获利 最小割
裸的最小割,很经典的模型. 建图:要求总收益-总成本最大,那么将每条弧与源点相连,流量为成本,每个收益与汇点相连,流量为收益,然后每条弧与它所能到达的收益相连,流量为inf. 与源点相连的是未被选中的 ...
随机推荐
- RabbitMQ系列文章
详解 RabbitMQ 管理界面解析框架 (一) RabbitMQ系列(二)深入了解RabbitMQ工作原理及简单使用 RabbitMQ windows安装步骤 RabbitMQ管理页面各种属性详解 ...
- webpack散记---代码分割 和 懒加载
webpack methods ES 2015 Loader spec (1)webpack methods方法 require.ensure //可以动态加载依赖 []:dependencies / ...
- vue学习(四)插槽
一 匿名插槽 // 语法 Vue.component('MBtn', { template: ` <button> <slot></slot> </butto ...
- ConcurrentHashMap核心源码浅析
1.引子 并发编程中使用HashMap可能导致程序死循环.因为多线程会put方法添加键值对时将导致HashMap的Entry链表形成环形数据结构,一旦形成环形数据结构,Entry的next节点永远不为 ...
- 使用SSH工具连接WSL
简单记录下操作过程 我在微软应用商店下载了Ubuntu 18.04 LTS.但是Windows的命令行太丑,我打算使用SSH工具连接WSL,输入密码一直拒绝连接... 查找资料之后解决了这个问题 双击 ...
- HDFS 中文件操作的错误集锦
问题1 Java ApI执行追加写入时:无法写入 问题描述: ①当前数据节点无法写入,②追加文件需要再次请求. 问题2 命令行执行追加写入时:无法写入 问题描述: 当前数据节点无法写入 问题3 ...
- 国内OLED产业与三星到底是差之千里还是近在咫尺?
此前,市面上几乎大部分智能手机搭载的刘海屏,都是来自三星的AMOLED屏幕.虽然三星总是被诟病为中国手机厂商提供的是"次品",不过没办法,OLED屏幕的核心技术.产能等都掌握在三星 ...
- mysql+MHA高可用 (一主双从)
1.准备三台服务器 10.0.0.12 10.0.0.13 10.0.0.14 2.在三台服务器上执行操作 时间同步 [root@ c7m01 ~]# echo "*/5* * * * /u ...
- PyTorch实战:经典模型LeNet5实现手写体识别
在上一篇博客CNN核心概念理解中,我们以LeNet为例介绍了CNN的重要概念.在这篇博客中,我们将利用著名深度学习框架PyTorch实现LeNet5,并且利用它实现手写体字母的识别.训练数据采用经典的 ...
- VSFTP 连接时425 Security: Bad IP connecting.报错-----解决方法
当登录FTP时候出现这个报错时.是因为PASV模式的安全检查是开启的(默认是开启的) ftp> ls227 Entering Passive Mode (172,16,101,33,35,58 ...