bzoj 3894: 文理分科
Description
Input
Output
Sample Input
13 2 4 13
7 13 8 12
18 17 0 5
8 13 15 4
11 3 8 11
11 18 6 5
1 2 3 4
4 2 3 2
3 1 0 4
3 2 3 2
0 2 2 1
0 2 4 4
Sample Output
HINT
Source
一道很不错的最小割模型混杂题,画了好久才跑对QAQ...
// MADE BY QT666
#include<cstdio>
#include<algorithm>
#include<cmath>
#include<iostream>
#include<cstring>
#define RG register
using namespace std;
typedef long long ll;
const int N=1000050;
const int Inf=19260817;
int gi(){
int x=0,flag=1;
char ch=getchar();
while(ch<'0'||ch>'9'){if(ch=='-') flag=-1;ch=getchar();}
while(ch>='0'&&ch<='9') x=x*10+ch-'0',ch=getchar();
return x*flag;
}
int head[N],nxt[N],to[N],s[N],cnt=1,n,m;
int a[550][550],b[550][550],c[550][550],d[550][550];
int id[550][550][3],tt,S,T,level[N],q[N*5],F,tot;
int mx[5]={1,-1,0,0},my[5]={0,0,1,-1};
inline void Addedge(RG int x,RG int y,RG int z) {
to[++cnt]=y,s[cnt]=z,nxt[cnt]=head[x],head[x]=cnt;
}
inline void lnk(RG int x,RG int y,RG int z){
Addedge(x,y,z),Addedge(y,x,0);
}
inline bool bfs(){
for(RG int i=S;i<=T;i++) level[i]=0;
q[0]=S,level[S]=1;int t=0,sum=1;
while(t<sum){
int x=q[t++];
if(x==T) return 1;
for(RG int i=head[x];i;i=nxt[i]){
int y=to[i];
if(s[i]&&level[y]==0){
level[y]=level[x]+1;
q[sum++]=y;
}
}
}
return 0;
}
inline int dfs(RG int x,int maxf){
if(x==T) return maxf;
int ret=0;
for(RG int i=head[x];i;i=nxt[i]){
int y=to[i],f=s[i];
if(level[y]==level[x]+1&&f){
int minn=min(f,maxf-ret);
f=dfs(y,minn);
s[i]-=f,s[i^1]+=f,ret+=f;
if(ret==maxf) break;
}
}
if(!ret) level[x]=0;
return ret;
}
inline void Dinic(){
while(bfs()) F+=dfs(S,Inf);
}
int main(){
n=gi(),m=gi();
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++){
a[i][j]=gi(),tot+=a[i][j];
}
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++){
b[i][j]=gi();tot+=b[i][j];
}
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++){
c[i][j]=gi();tot+=c[i][j];
}
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++){
d[i][j]=gi();tot+=d[i][j];
}
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
for(int k=0;k<3;k++){
id[i][j][k]=++tt;
}
S=0,T=tt+1;
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++){
lnk(S,id[i][j][0],a[i][j]);
lnk(id[i][j][0],T,b[i][j]);
lnk(id[i][j][0],id[i][j][1],Inf);
lnk(id[i][j][2],id[i][j][0],Inf);
lnk(id[i][j][1],T,d[i][j]);
lnk(S,id[i][j][2],c[i][j]);
for(int k=0;k<4;k++){
int x=i+mx[k],y=j+my[k];
if(1<=x&&x<=n&&1<=y&&y<=m){
lnk(id[x][y][0],id[i][j][1],Inf);
lnk(id[i][j][2],id[x][y][0],Inf);
}
}
}
Dinic();printf("%d\n",tot-F);
return 0;
}
bzoj 3894: 文理分科的更多相关文章
- BZOJ 3894: 文理分科 [最小割]
3894: 文理分科 Time Limit: 10 Sec Memory Limit: 512 MBSubmit: 674 Solved: 392[Submit][Status][Discuss] ...
- [BZOJ 3894] 文理分科 【最小割】
题目链接:BZOJ - 3894 题目分析 最小割模型,设定一个点与 S 相连表示选文,与 T 相连表示选理. 那么首先要加上所有可能获得的权值,然后减去最小割,即不能获得的权值. 那么对于每个点,从 ...
- ●BZOJ 3894 文理分科
题链: https://vijos.org/d/ljt12138/p/58c696b8d3d8a16c62a248d4 (要权限号啊...用这个交吧) 题解: 题目大意: N*M的矩阵,每个位置 ...
- bzoj 3894 文理分科【最小割+dinic】
谁说这道和2127是双倍经验的来着完全不一样啊? 数组开小会TLE!数组开小会TLE!数组开小会TLE! 首先sum统计所有收益 对于当前点\( (i,j) \)考虑,设\( x=(i-1)*m+j ...
- 【BZOJ3894】文理分科(最小割)
[BZOJ3894]文理分科(最小割) 题面 BZOJ Description 文理分科是一件很纠结的事情!(虽然看到这个题目的人肯定都没有纠 结过) 小P所在的班级要进行文理分科.他的班级可以用一个 ...
- BZOJ3894:文理分科——题解
http://www.lydsy.com/JudgeOnline/problem.php?id=3894 文理分科是一件很纠结的事情!(虽然看到这个题目的人肯定都没有纠结过) 小P所在的班级要进行文理 ...
- bzoj3894: 文理分科(还是那道最小割)
3894: 文理分科 题目:传送门 感谢波老师没有来D飞我,让我做出了这题... 题解: 这题其实和我做的上一题(bzoj2132)很像,所以就不写题意了. 依然是那最小割... 这题给出了四个利益矩 ...
- 【BZOJ】【3894】文理分科
网络流/最小割 rausen大爷太神辣-作为一个蒟蒻还是搬运题解吧…… 很明显的一道网络流题.. 首先把所有值的加起来,再减掉网络流最小割值就好了,问题就是如何建图.这貌似也是考了好多次了的... 把 ...
- BZOJ3894:文理分科(最大流)(同BZoj3438)
文理分科是一件很纠结的事情!(虽然看到这个题目的人肯定都没有纠 结过) 小P所在的班级要进行文理分科.他的班级可以用一个n*m的矩阵进行 描述,每个格子代表一个同学的座位.每位同学必须从文科和理科中选 ...
随机推荐
- Dynamics 365创建电子邮箱字段包含值的联系人同时更改负责人的方法。
摘要: 本人微信和易信公众号: 微软动态CRM专家罗勇 ,回复267或者20171129可方便获取本文,同时可以在第一间得到我发布的最新的博文信息,follow me!我的网站是 www.luoyon ...
- Just for 面试
ZOJ题目分类 初学者题: 1001 1037 1048 1049 1051 1067 1115 1151 1201 1205 1216 1240 1241 1242 1251 1292 1331 1 ...
- HDU-1242-Rescu
Rescue Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Sub ...
- 关于磁盘冗余阵列、热备、群集、负载均衡、云计算、F5、Nginx等的概念和基本原理
在系统部署实施过程中,客户往往会关注系统的可用性方面的指标. 对于一个具备高可用性的系统来说, 多机部署方案是必不可少的. 我们这个知识分享,就从多个不同层面来介绍多机部署方案. ---------- ...
- PHP 获取ip地址
public function getIP() { if (getenv("HTTP_CLIENT_IP")) $ip = getenv("HTTP_CLIENT_IP& ...
- FastDFS迁移步骤
1.在新的机器上安装FastDFS 2.将新的storage接到老的tracker机器上,用来同步数据(/usr/local/fastdfs/bin/fdfs_storaged) 数据同步完成后,需要 ...
- YiShop_做一个b2c商城要多少钱
[YiShop商城系统]做一个b2c商城要多少钱?是企业在做一个b2c商城最关心的问题.每个企业都是想用最少的钱做一个好的b2c商城.但企业这种想法可能在现实中是无法实现的.网站这种产品现实中是一分钱 ...
- git以及github的初级入门(一)
本身学习git的操作是没什么兴趣的,毕竟原本是win平台学的java开发,git下那么多复制的命令行操作确实比较让人头疼,直到昨天我打开计算机的时候,我放置项目的E盘,以及F盘,G盘盘符都不见了!!我 ...
- setTimeout和setInterval和单线程
我们知道,js是单线程执行的(单线程j就是说在程序执行时,所走的程序路径按照连续顺序排下来,前面的必须处理好,后面的才会执行).所以其实setTimeout和setInterval所谓的"异 ...
- TP3.2 图片上传及缩略图
基于TP自带的上传文件的类, Think/Upload.class.php 设置表单的enctype属性 下面是上传的具体方法 /** * 图片上传处理 * @param [String] $path ...