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
对于每一个人多建立两个新点,分别表示以这个点为中心的五个点全部选择文科和理科。记这两个点为S1和S2。
S1->以这个点为中心的五个点 f:INF
一这个点为中心的五个点->S2 f:INF*/
by
http://blog.csdn.net/jiangyuze831/article/details/43968571
//我只是不知道该怎么表述
#include<cstdio>
#include<string>
#include<cstring>
using namespace std;
struct line
{int s,t;int f;int next;
}a[4000001];
int head[100001];
int edge;
int p;
int q[400001],d[400001];
inline void add(int s,int t,int f)
{a[edge].next=head[s];head[s]=edge;a[edge].s=s;a[edge].t=t;a[edge].f=f;
}
inline bool bfs()
{int l=0,r=0;memset(q,0,sizeof(q));r++;q[r]=0;memset(d,-1,sizeof(d));d[0]=0;int i,k;while(l<r){l++;int k=q[l];for(i=head[k];i!=0;i=a[i].next){if(a[i].f>0&&d[a[i].t]==-1){d[a[i].t]=d[k]+1;r++;q[r]=a[i].t;}}}if(d[p]>=0)return true;return false;
}
inline int dfs(int k,int s)
{if(k==p)return s;int t=s;int i;for(i=head[k];i!=0;i=a[i].next){if(d[a[i].t]==d[k]+1&&a[i].f>0){int xx=dfs(a[i].t,min(s,a[i].f));a[i].f-=xx;if(i%2==0)a[i-1].f+=xx;elsea[i+1].f+=xx;s-=xx;}}return t-s;
}
inline int maxflow()
{int s=0;while(bfs())s+=dfs(0,2100000000);return s;
}
int main()
{int n,m;scanf("%d%d",&n,&m);int i,j;int sum=0;int x;for(i=1;i<=n;i++){for(j=1;j<=m;j++){scanf("%d",&x);sum+=x;edge++;add(0,(i-1)*m+j,x);edge++;add((i-1)*m+j,0,0);}}p=n*m*4;for(i=1;i<=n;i++){for(j=1;j<=m;j++){scanf("%d",&x);sum+=x;edge++;add((i-1)*m+j,p,x);edge++;add(p,(i-1)*m+j,0);}}int d=n*m;for(i=1;i<=n;i++){for(j=1;j<=m;j++){scanf("%d",&x);sum+=x;d++;edge++;add(0,d,x);edge++;add(d,0,0);edge++;add(d,(i-1)*m+j,2100000000);edge++;add((i-1)*m+j,d,0);if(j>1){edge++;add(d,(i-1)*m+j-1,2100000000);edge++;add((i-1)*m+j-1,d,0);}if(j<m){edge++;add(d,(i-1)*m+j+1,2100000000);edge++;add((i-1)*m+j+1,d,0);}if(i<n){edge++;add(d,i*m+j,2100000000);edge++;add(i*m+j,d,0);}if(i>1){edge++;add(d,(i-2)*m+j,2100000000);edge++;add((i-2)*m+j,d,0);}}}for(i=1;i<=n;i++){for(j=1;j<=m;j++){scanf("%d",&x);sum+=x;d++;edge++;add(d,p,x);edge++;add(p,d,0);edge++;add((i-1)*m+j,d,2100000000);edge++;add(d,(i-1)*m+j,0);if(j>1){edge++;add((i-1)*m+j-1,d,2100000000);edge++;add(d,(i-1)*m+j-1,0);}if(j<m){edge++;add((i-1)*m+j+1,d,2100000000);edge++;add(d,(i-1)*m+j+1,0);}if(i<n){edge++;add(i*m+j,d,2100000000);edge++;add(d,i*m+j,0);}if(i>1){edge++;add((i-2)*m+j,d,2100000000);edge++;add(d,(i-2)*m+j,0);}}}printf("%d\n",sum-maxflow());return 0;
}
bzoj 3894: 文理分科相关推荐
- [BZOJ 3894]文理分科
3438: 小M的作物 Time Limit: 10 Sec Memory Limit: 256 MB Submit: 729 Solved: 328 [Submit][Status][Discu ...
- [BZOJ 3894]文理分科(最小割)
Description 文理分科是一件很纠结的事情!(虽然看到这个题目的人肯定都没有纠结过) 小P所在的班级要进行文理分科.他的班级可以用一个n*m的矩阵进行 描述,每个格子代表一个同学的座位.每位同 ...
- bzoj 3894: 文理分科 最小割
Description 文理分科是一件很纠结的事情!(虽然看到这个题目的人肯定都没有纠 结过) 小P所在的班级要进行文理分科.他的班级可以用一个n*m的矩阵进行 描述,每个格子代表一个同学的座位.每位 ...
- BZOJ 3894 文理分科
题解:最小割建模 如果某些元素在一起会得到收益考虑最小割 答案 总收益-最小割 注意:对0点的处理 一开始模型是错的 #include<iostream> #include<cstd ...
- BZOJ 3894 文理分科 最小割
题目大意:给定一个m*n的矩阵,每个格子的人可以学文或者学理,学文和学理各有一个满意度,如果以某人为中心的十字内所有人都学文或者学理还会得到一个额外满意度,求最大满意度之和 令S集为学文,T集为学理 ...
- BZOJ:3894: 文理分科(网络流)
题目 每个同学都只能选择文科或者理科一种,选择文科会获得一个权值,理科也有,如果一个人以及周围四个人都选择了一个学科,那么又会获得一个权值. 将权值最大化. 分析 很经典的网络流题目,用最小割. 首先 ...
- 【BZOJ 3894】 文理分科
3894: 文理分科 Time Limit: 10 Sec Memory Limit: 512 MB Submit: 194 Solved: 122 [Submit][Status][Discuss] ...
- BZOJ3894:文理分科——题解
http://www.lydsy.com/JudgeOnline/problem.php?id=3894 文理分科是一件很纠结的事情!(虽然看到这个题目的人肯定都没有纠结过) 小P所在的班级要进行文理 ...
- 文理分科 (最小割问题)
Description 文理分科是一件很纠结的事情!(虽然看到这个题目的人肯定都没有纠结过) 小P所在的班级要进行文理分科.他的班级可以用一个n*m的矩阵进行描述,每个格子代表一个同学的座位.每位同学 ...
最新文章
- 【实战教程】腾讯云搭建微信小程序服务
- python表白对话框-python tkinter-消息框、对话框、文件对话框
- Java的内存分配策略有哪些_Java的内存分配策略
- mysql insert 语句优化_分享insert into语句优化的小技巧
- maven报错Non-resolvable parent POM for com.wpbxin:springboot2-first-example:0.0.1-SNAPSHOT: Could not
- Reddit热议:为什么PyTorch比TensorFlow更快?
- NUC1013 阶乘结果末尾有多少零【分析思维】
- Cesium:向地图中添加面的方法
- 计算机上可以插键盘吗,电脑键盘上这些按键竟然可以这样用?
- 项目管理和版本跟踪——Redmine和SVN的结合
- 线程安全单例模式(C++)
- xfce实现桌面图标透明
- 【2022年二级Python】②基本数据类型
- lisp 圆柱螺旋线_Visual LISP开发三维圆柱螺旋线程序
- 华硕主板关闭Secure Boot步骤 :(支持b460/b560/b660主板)
- Python 爬取微博、百度实时热点
- android 调用系统输入法,Android 1.6中文输入法调用
- git did not exit cleanly (exit code 128)我个人解决方案
- 身份证实名认证-身份实名认证-身份证核验
- @支付宝@微信支付,世界第一要来和你们抢生意了!
热门文章
- always@(posedge clk)时序赋值延迟一个周期
- 题目:下面关于Java接口的说法错误的是()
- Begin at the Beginning
- 偶然出现 segmentation fault 时的调试方法与 SIGSEGV 信号
- RunJS推荐用于个人使用(使用方便JS、css实时预览、编辑、管理等功能)
- java基础算法优化解决兔子数量以及拓展
- 不可多得的学习软件 我爱学习 for Android
- android fragment加载布局的方式,Android中Fragment的加载方式与数据通信详解
- gabor特征提取 matlab,Gabor特征提取
- ts流分析软件TS Expert