BZOJ 2127 二元关系
题意:
思路:
先把所有的值加起来
最小割割哪儿 就代表那个地方不选
一减 剩下的就是 最大值了
//By SiriusRen
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
const int N=105,M=10005,K=300050,inf=0x3f3f3f3f;
int n,m,T,cnt,tot,ans;
int A[N][N],B[N][N],C[N][N],D[N][N],E[N][N],F[N][N],id[N][N];
int first[M],next[K],v[K],w[K],q[M],vis[M];
void Add(int x,int y,int z){w[tot]=z,v[tot]=y,next[tot]=first[x],first[x]=tot++;}
void add(int x,int y,int z){Add(x,y,z),Add(y,x,0);}
bool tell(){
memset(vis,-1,sizeof(vis)),vis[0]=0;
int head=0,tail=0;
while(head<=tail){
int t=q[head++];
for(int i=first[t];~i;i=next[i])if(!~vis[v[i]]&&w[i])
vis[v[i]]=vis[t]+1,q[++tail]=v[i];
}return ~vis[T];
}
int zeng(int x,int y){
if(x==T)return y;
int r=0;
for(int i=first[x];~i&&y>r;i=next[i])if(vis[v[i]]==vis[x]+1&&w[i]){
int t=zeng(v[i],min(y-r,w[i]));
w[i]-=t,w[i^1]+=t,r+=t;
}if(!r)vis[x]=-1;
return r;
}
int main(){
memset(first,-1,sizeof(first));
scanf("%d%d",&n,&m),T=n*m+1;
for(int i=1;i<=n;i++)for(int j=1;j<=m;j++)scanf("%d",&A[i][j]),id[i][j]=++cnt;
for(int i=1;i<=n;i++)for(int j=1;j<=m;j++)scanf("%d",&B[i][j]);
for(int i=1;i<n;i++)for(int j=1;j<=m;j++)scanf("%d",&C[i][j]);
for(int i=1;i<n;i++)for(int j=1;j<=m;j++)scanf("%d",&D[i][j]);
for(int i=1;i<=n;i++)for(int j=1;j<m;j++)scanf("%d",&E[i][j]);
for(int i=1;i<=n;i++)for(int j=1;j<m;j++)scanf("%d",&F[i][j]);
for(int i=1;i<=n;i++)for(int j=1;j<=m;j++)
add(0,id[i][j],A[i][j]*2),add(id[i][j],T,B[i][j]*2),ans+=A[i][j]+B[i][j];
for(int i=1;i<n;i++)for(int j=1;j<=m;j++){
add(0,id[i][j],C[i][j]),add(0,id[i+1][j],C[i][j]);
add(id[i][j],T,D[i][j]),add(id[i+1][j],T,D[i][j]);
add(id[i][j],id[i+1][j],C[i][j]+D[i][j]);
add(id[i+1][j],id[i][j],C[i][j]+D[i][j]);
ans+=C[i][j]+D[i][j];
}
for(int i=1;i<=n;i++)for(int j=1;j<m;j++){
add(0,id[i][j],E[i][j]),add(0,id[i][j+1],E[i][j]);
add(id[i][j],T,F[i][j]),add(id[i][j+1],T,F[i][j]);
add(id[i][j],id[i][j+1],E[i][j]+F[i][j]);
add(id[i][j+1],id[i][j],E[i][j]+F[i][j]);
ans+=E[i][j]+F[i][j];
}ans*=2;
while(tell())while(m=zeng(0,inf))ans-=m;
printf("%d\n",ans/2);
}
BZOJ 2127 二元关系的更多相关文章
- [BZOJ 2127] happiness 【最小割】
题目链接:BZOJ - 2127 题目分析 首先,每个人要么学文科,要么学理科,所以可以想到是一个最小割模型. 我们就确定一个人如果和 S 相连就是学文,如果和 T 相连就是学理. 那么我们再来确定建 ...
- BZOJ 2127: happiness [最小割]
2127: happiness Time Limit: 51 Sec Memory Limit: 259 MBSubmit: 1815 Solved: 878[Submit][Status][Di ...
- BZOJ 2127 / Luogu P1646 [国家集训队]happiness (最小割)
题面 BZOJ传送门 Luogu传送门 分析 这道题又出现了二元关系,于是我们只需要解方程确定怎么连边就行了 假设跟SSS分在一块是选文科,跟TTT分在一块是选理科,先加上所有的收益,再来考虑如何让需 ...
- [置顶] [BZOJ]2127: happiness 最小割
happiness: Description 高一一班的座位表是个n*m的矩阵,经过一个学期的相处,每个同学和前后左右相邻的同学互相成为了好朋友.这学期要分文理科了,每个同学对于选择文科与理科有着自己 ...
- bzoj——2127: happiness
2127: happiness Time Limit: 51 Sec Memory Limit: 259 MBSubmit: 2570 Solved: 1242[Submit][Status][D ...
- bzoj 2127: happiness
#include<cstdio> #include<iostream> #include<cstring> #define M 100009 #define inf ...
- [国家集训队]happiness 最小割 BZOJ 2127
题目描述 高一一班的座位表是个n*m的矩阵,经过一个学期的相处,每个同学和前后左右相邻的同学互相成为了好朋友.这学期要分文理科了,每个同学对于选择文科与理科有着自己的喜悦值,而一对好朋友如果能同时选文 ...
- BZOJ 2127 happiness ——网络流
[题目分析] 基本上是第一次真正的使用最小割的模型. 同时加上一个数然后最后再减去是处理负数的一种方法. 设立出来最小割的模型然后解方程是一件很重要的事情,建议取一个相对来说比较简单的值带入求解. 这 ...
- bzoj 2127 happiness【最小割+dinic】
参考:https://www.cnblogs.com/chenyushuo/p/5144957.html 不得不说这个建图方法真是非常妙啊 假设S点选理,T点选文,a[i][j]为(i,j)选文收益, ...
随机推荐
- BZOJ 3667 Pollard-rho &Miller-Rabin
论O(1)快速乘和O(logn)快速乘的差距-. //By SiriusRen #include <cstdio> #include <algorithm> using nam ...
- TimSort学习资料
深入理解 timsort 算法(1):自适应归并排序 如何找出Timsort算法和玉兔月球车中的Bug? Java TimSort算法 源码 笔记 Timsort https://en.wikiped ...
- Spark SQL 编程API入门系列之SparkSQL的入口
不多说,直接上干货! SparkSQL的入口:SQLContext SQLContext是SparkSQL的入口 val sc: SparkContext val sqlContext = new o ...
- 解决有关null闪退及json解析数据中null的问题
程序在获取某些数据之后莫名崩溃.其实很早就发现了原因: 由于服务器的数据库中有些字段为空, 然后以Json形式返回给客户端时就会出现这样的数据: "somevalue":null ...
- Smalltalk
Smalltalk is an object-oriented, dynamically typed, reflective programming language. Smalltalk was o ...
- innerHTML 与 outerHTML区别
示例代码: <div id="test"> <p>这是innerHTML</p> <p>这是innerHTML</p> ...
- 搭建自己的koa+mysql后台模板
1.在vscode里面打开一个文件夹 2.cnpm init 3.导入必要的依赖项 "dependencies": { "koa": "^2.7.0& ...
- CF894E Ralph and Mushrooms_强连通分量_记忆化搜索_缩点
Code: #include<cstdio> #include<stack> #include<cstring> using namespace std; cons ...
- [NOIP补坑计划]NOIP2016 题解&做题心得
感觉16年好难啊QAQ,两天的T2T3是不是都放反了啊…… 场上预计得分:100+80+100+100+65+100=545(省一分数线280) ps:loj没有部分分,部分分见洛咕 题解: D1T1 ...
- js倒计时demo 天/时/分/秒
<html><head> <meta charset="UTF-8"> <title>js简单时分秒倒计时</title> ...