●BOZJ 2127 happiness
题链:
http://www.lydsy.com/JudgeOnline/problem.php?id=2127
题解:
和 BZOJ 3984 建图类似(最小割模型)。
但是这个建图方法效率有点低。
另外这里这个解法比较高效,写得很好很清晰:
http://blog.csdn.net/hzj1054689699/article/details/53038620
代码:
#include<queue>
#include<cstdio>
#include<cstring>
#include<iostream>
#define MAXN 65000
#define MAXM 300000
#define INF 0x3f3f3f3f
using namespace std;
struct Edge{
int to[MAXM],cap[MAXM],nxt[MAXM],head[MAXN],ent;
void Init(){
ent=2; memset(head,0,sizeof(head));
}
void Adde(int u,int v,int w){
to[ent]=v; cap[ent]=w; nxt[ent]=head[u]; head[u]=ent++;
to[ent]=u; cap[ent]=0; nxt[ent]=head[v]; head[v]=ent++;
}
int Next(int i,bool type){
return type?head[i]:nxt[i];
}
}E;
int cur[MAXN],d[MAXN];
int N,M,S,T,ans;
int idx(int i,int j,int k){
return (i-1)*M+j+k*N*M;
}
bool bfs(){
queue<int>q; int u,v;
memset(d,0,sizeof(d));
d[S]=1; q.push(S);
while(!q.empty()){
u=q.front(); q.pop();
for(int i=E.Next(u,1);i;i=E.Next(i,0)){
v=E.to[i];
if(d[v]||!E.cap[i]) continue;
d[v]=d[u]+1; q.push(v);
}
}
return d[T];
}
int dfs(int u,int reflow){
if(u==T||!reflow) return reflow;
int flowout=0,f,v;
for(int i=E.Next(u,1);i;i=E.Next(i,0)){
v=E.to[i];
if(d[v]!=d[u]+1) continue;
f=dfs(v,min(reflow,E.cap[i]));
flowout+=f; E.cap[i^1]+=f;
reflow-=f; E.cap[i]-=f;
if(!reflow) break;
}
if(!flowout) d[u]=0;
return flowout;
}
int Dinic(){
int flow=0;
while(bfs()){
memcpy(cur,E.head,sizeof(E.head));
flow+=dfs(S,INF);
}
return flow;
}
int main()
{
E.Init();
scanf("%d%d",&N,&M);
S=N*M*5+1; T=N*M*5+2;
for(int i=1,x;i<=N;i++)
for(int j=1;j<=M;j++)
scanf("%d",&x),ans+=x,E.Adde(S,idx(i,j,0),x);
for(int i=1,x;i<=N;i++)
for(int j=1;j<=M;j++)
scanf("%d",&x),ans+=x,E.Adde(idx(i,j,0),T,x);
for(int i=1,_i,_j,x;i<N;i++)
for(int j=1;j<=M;j++){
scanf("%d",&x); ans+=x;
E.Adde(S,idx(i,j,1),x);
E.Adde(idx(i,j,1),idx(i,j,0),INF);
E.Adde(idx(i,j,1),idx(i+1,j,0),INF);
}
for(int i=1,_i,_j,x;i<N;i++)
for(int j=1;j<=M;j++){
scanf("%d",&x); ans+=x;
E.Adde(idx(i,j,2),T,x);
E.Adde(idx(i,j,0),idx(i,j,2),INF);
E.Adde(idx(i+1,j,0),idx(i,j,2),INF);
}
for(int i=1,_i,_j,x;i<=N;i++)
for(int j=1;j<M;j++){
scanf("%d",&x); ans+=x;
E.Adde(S,idx(i,j,3),x);
E.Adde(idx(i,j,3),idx(i,j,0),INF);
E.Adde(idx(i,j,3),idx(i,j+1,0),INF);
}
for(int i=1,_i,_j,x;i<=N;i++)
for(int j=1;j<M;j++){
scanf("%d",&x); ans+=x;
E.Adde(idx(i,j,4),T,x);
E.Adde(idx(i,j,0),idx(i,j,4),INF);
E.Adde(idx(i,j+1,0),idx(i,j,4),INF);
}
int der=Dinic();
ans-=der;
printf("%d",ans);
return 0;
}
●BOZJ 2127 happiness的更多相关文章
- BZOJ 2127: happiness [最小割]
2127: happiness Time Limit: 51 Sec Memory Limit: 259 MBSubmit: 1815 Solved: 878[Submit][Status][Di ...
- bzoj——2127: happiness
2127: happiness Time Limit: 51 Sec Memory Limit: 259 MBSubmit: 2570 Solved: 1242[Submit][Status][D ...
- [置顶] [BZOJ]2127: happiness 最小割
happiness: Description 高一一班的座位表是个n*m的矩阵,经过一个学期的相处,每个同学和前后左右相邻的同学互相成为了好朋友.这学期要分文理科了,每个同学对于选择文科与理科有着自己 ...
- [BZOJ 2127] happiness 【最小割】
题目链接:BZOJ - 2127 题目分析 首先,每个人要么学文科,要么学理科,所以可以想到是一个最小割模型. 我们就确定一个人如果和 S 相连就是学文,如果和 T 相连就是学理. 那么我们再来确定建 ...
- bzoj 2127: happiness
#include<cstdio> #include<iostream> #include<cstring> #define M 100009 #define inf ...
- BZOJ 2127 happiness ——网络流
[题目分析] 基本上是第一次真正的使用最小割的模型. 同时加上一个数然后最后再减去是处理负数的一种方法. 设立出来最小割的模型然后解方程是一件很重要的事情,建议取一个相对来说比较简单的值带入求解. 这 ...
- bzoj 2127 happiness【最小割+dinic】
参考:https://www.cnblogs.com/chenyushuo/p/5144957.html 不得不说这个建图方法真是非常妙啊 假设S点选理,T点选文,a[i][j]为(i,j)选文收益, ...
- BZOJ 2127: happiness(最小割解决集合划分)
Time Limit: 51 Sec Memory Limit: 259 MBSubmit: 2350 Solved: 1138[Submit][Status][Discuss] Descript ...
- 【BZOJ】【2127】happiness
网络流/最小割 Orz Hzwer. 这题他题解说的比较简略……我手画了个图才明白过来…… 嗯对于每个人选文or理的单独收益大家应该很好理解……连S->i 权值为选文的喜悦值,i->T权值 ...
随机推荐
- 201621123040《Java程序设计》第5周学习总结
1.本周学习总结 1.1写出你认为本周学习中比较重要的知识点关键词 关键词:接口 Comparable Comparator 比较排序 1.2尝试使用思维导图将这些关键词组织起来.注:思维导图一般不需 ...
- 如何减小ios安装包大小
以前的老文章了,搬到cnblog 更小的安装包意味着更快的下载安装速度,也往往意味着更快的加载运行速度,是优化ios应用的一个重要方面,本文主要参考<减小iOS应用程序的大小>,在实际测试 ...
- Python基于共现提取《釜山行》人物关系
Python基于共现提取<釜山行>人物关系 一.课程介绍 1. 内容简介 <釜山行>是一部丧尸灾难片,其人物少.关系简单,非常适合我们学习文本处理.这个项目将介绍共现在关系中的 ...
- 算法第四版学习笔记之快速排序 QuickSort
软件:DrJava 参考书:算法(第四版) 章节:2.3快速排序(以下截图是算法配套视频所讲内容截图) 1:快速排序 2:
- vue内置指令详解——小白速会
指令 (Directives) 是带有 v- 前缀的特殊属性,职责是,当表达式的值改变时,将其产生的连带影响,响应式地作用于 DOM. 内置指令 1.v-bind:响应并更新DOM特性:例如:v-bi ...
- 08-TypeScript中的类
类的概念通常是在后端开发中实现的思想,比如C#.C++或Java,传统的JavaScript开发通过使用原型模式来模拟类的功能.在TypeScript中,天生就是支持类 的,可以让前端的开发更加具有面 ...
- 利用java反射读写csv中的数据
前一段有个需求需要将从数据库读取到的信息保存到csv文件中,在实现该需求的时候发现资料比较少,经过收集反射和csv相关资料,最终得到了如下程序. 1.在使用java反射读取csv文件数据时,先通 ...
- Table点击某个td获取当前列的头名称
jq代码: $("td").click(function () { var tdHtml = $(this).attr("html"); var index = ...
- H5新特性之webWorker
众所周知javascript是单线程语言,这就是js开发难度较低的原因了,因为不需要解决多线程的资源共享问题(例如死锁),但是单线程性能并不好,因此多了一个webWorker实现js的多进程来提升js ...
- 在Vim按了ctrl+s后
在windows我们码代码的时候习惯ctrl+s保存: 但在vim中使用ctrl+s之后终端就没反应了... vim: ctrl+s终止屏幕输出,敲的东西都有效,就是看不见. ctrl+q恢复: