Time Limit: 10 Sec  Memory Limit: 512 MB
Submit: 667  Solved: 389

Description

 文理分科是一件很纠结的事情!(虽然看到这个题目的人肯定都没有纠
结过)
 小P所在的班级要进行文理分科。他的班级可以用一个n*m的矩阵进行
描述,每个格子代表一个同学的座位。每位同学必须从文科和理科中选择
一科。同学们在选择科目的时候会获得一个满意值。满意值按如下的方式
得到:
1.如果第i行第秒J的同学选择了文科,则他将获得art[i][j]的满意值,如
  果选择理科,将得到science[i][j]的满意值。
2.如果第i行第J列的同学选择了文科,并且他相邻(两个格子相邻当且
  仅当它们拥有一条相同的边)的同学全部选择了文科,则他会更开
  心,所以会增加same_art[i][j]的满意值。
3.如果第i行第j列的同学选择了理科,并且他相邻的同学全部选择了理
  科,则增加same_science[i]j[]的满意值。
  小P想知道,大家应该如何选择,才能使所有人的满意值之和最大。请
告诉他这个最大值。
 

Input

 
第一行为两个正整数:n,m
接下来n术m个整数,表示art[i][j];
接下来n术m个整数.表示science[i][j];
接下来n术m个整数,表示same_art[i][j];
 

Output

 
输出为一个整数,表示最大的满意值之和
 

Sample Input

3 4
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

152

HINT

样例说明
1表示选择文科,0表示选择理科,方案如下:
1  0  0  1
0  1  0  0
1  0  0  0
 
N,M<=100,读入数据均<=500

网络流 最小割

最大权闭合子图

1、从S向学生连边,容量为学文的收益;

2、从学生向T连边,容量为学理的收益;

3、对于一个学生,新建一个点,从S向该点连边,容量为周围人都学文的收益,再从该点向周围学生连边,容量为INF;

4、都学理同理。

答案为权值总和减去最小割

思路倒是好想,然而各种写不对,最后发现,处理一群人学同样课的点的时候,没有向表示该学生自身的点连边……

  1. /*by SilverN*/
  2. #include<algorithm>
  3. #include<iostream>
  4. #include<cstring>
  5. #include<cstdio>
  6. #include<cmath>
  7. #include<vector>
  8. #include<queue>
  9. using namespace std;
  10. const int mx[]={,,,-,};
  11. const int my[]={,,,,-};
  12. const int INF=1e9;
  13. const int mxn=;
  14. int read(){
  15. int x=,f=;char ch=getchar();
  16. while(ch<'' || ch>''){if(ch=='-')f=-;ch=getchar();}
  17. while(ch>='' && ch<=''){x=x*+ch-'';ch=getchar();}
  18. return x*f;
  19. }
  20. struct edge{
  21. int v,nxt,f;
  22. }e[mxn*];
  23. int hd[mxn],mct=;
  24. void add_edge(int u,int v,int f){
  25. e[++mct].v=v;e[mct].nxt=hd[u];e[mct].f=f;hd[u]=mct;return;
  26. }
  27. void insert(int u,int v,int f){
  28. add_edge(u,v,f);
  29. add_edge(v,u,);
  30. return;
  31. }
  32. int n,m,S,T;
  33. int d[mxn];
  34. bool BFS(){
  35. memset(d,,sizeof d);
  36. queue<int>q;
  37. d[S]=;
  38. q.push(S);
  39. while(!q.empty()){
  40. int u=q.front();q.pop();
  41. for(int i=hd[u];i;i=e[i].nxt){
  42. int v=e[i].v;
  43. if(e[i].f && !d[v]){
  44. d[v]=d[u]+;
  45. q.push(v);
  46. }
  47. }
  48. }
  49. return d[T];
  50. }
  51. int DFS(int u,int lim){
  52. if(u==T)return lim;
  53. int f=,tmp;
  54. for(int i=hd[u];i;i=e[i].nxt){
  55. int v=e[i].v;
  56. if(d[v]==d[u]+ && e[i].f){
  57. tmp=DFS(v,min(lim,e[i].f));
  58. e[i].f-=tmp;
  59. e[i^].f+=tmp;
  60. f+=tmp;
  61. lim-=tmp;
  62. if(!lim)return f;
  63. }
  64. }
  65. d[u]=;
  66. return f;
  67. }
  68. int Dinic(){
  69. int res=;
  70. while(BFS())res+=DFS(S,INF);
  71. return res;
  72. }
  73. int id[][],cnt=,ed;
  74. void init(){
  75. for(int i=;i<=n;i++)
  76. for(int j=;j<=m;j++)
  77. id[i][j]=++cnt;
  78. ed=n*m;
  79. return;
  80. }
  81. int ans=;
  82. void solve(){
  83. int i,j,x;
  84. for(i=;i<=n;i++)
  85. for(j=;j<=m;j++){
  86. x=read();ans+=x;
  87. insert(S,id[i][j],x);//art
  88. }
  89. for(i=;i<=n;i++)
  90. for(j=;j<=m;j++){
  91. x=read();ans+=x;
  92. insert(id[i][j],T,x);//science
  93. }
  94. for(i=;i<=n;i++)
  95. for(j=;j<=m;j++){
  96. x=read();//same_art
  97. ans+=x;
  98. for(int k=;k<=;k++){//从0到4
  99. int nx=i+mx[k],ny=j+my[k];
  100. if(nx< || nx>n || ny< ||ny>m)continue;
  101. insert(id[i][j]+ed,id[nx][ny],INF);
  102. }
  103. insert(S,id[i][j]+ed,x);
  104. }
  105. for(i=;i<=n;i++)
  106. for(j=;j<=m;j++){
  107. x=read();//same_sci
  108. ans+=x;
  109. for(int k=;k<=;k++){
  110. int nx=i+mx[k],ny=j+my[k];
  111. if(nx< || nx>n || ny< ||ny>m)continue;
  112. insert(id[nx][ny],id[i][j]+*ed,INF);
  113. }
  114. insert(id[i][j]+*ed,T,x);
  115. }
  116. ans-=Dinic();
  117. return;
  118. }
  119. int main(){
  120. int i,j,x;
  121. n=read();m=read();
  122. S=;T=n*m*+;
  123. init();
  124. solve();
  125. printf("%d\n",ans);
  126. return ;
  127. }

Bzoj3894 文理分科的更多相关文章

  1. [bzoj3894]文理分科_网络流_最小割

    文理分科 bzoj-3894 题目大意:题目链接. 注释:略. 想法: 这种题也是一种套路. 我们新建一个点表示收益点. 然后把所有的收益都加一起,求最小割表示代价即可. Code: #include ...

  2. BZOJ3894文理分科——最小割

    题目描述  文理分科是一件很纠结的事情!(虽然看到这个题目的人肯定都没有纠 结过)  小P所在的班级要进行文理分科.他的班级可以用一个n*m的矩阵进行 描述,每个格子代表一个同学的座位.每位同学必须从 ...

  3. [Bzoj3894]文理分科(最小割)

    Description  文理分科是一件很纠结的事情!(虽然看到这个题目的人肯定都没有纠结过)  小P所在的班级要进行文理分科.他的班级可以用一个n*m的矩阵进行描述,每个格子代表一个同学的座位.每位 ...

  4. bzoj3894: 文理分科(还是那道最小割)

    3894: 文理分科 题目:传送门 感谢波老师没有来D飞我,让我做出了这题... 题解: 这题其实和我做的上一题(bzoj2132)很像,所以就不写题意了. 依然是那最小割... 这题给出了四个利益矩 ...

  5. 【题解】 bzoj3894: 文理分科 (网络流/最小割)

    bzoj3894,懒得复制题面,戳我戳我 Solution: 首先这是一个网络流,应该还比较好想,主要就是考虑建图了. 我们来分析下题面,因为一个人要么选文科要么选理科,相当于两条流里面割掉一条(怎么 ...

  6. [BZOJ3894]文理分科(最小割)

    (1) 对每个位置建一个点F1,S向这个点连art[i][j]的边,这个点向T连science[i][j]的边. (2) 对每个位置再建一个点F2,S向这个点连same_art[i][j]的边,这个点 ...

  7. 【BZOJ3894】文理分科(最小割)

    [BZOJ3894]文理分科(最小割) 题面 BZOJ Description 文理分科是一件很纠结的事情!(虽然看到这个题目的人肯定都没有纠 结过) 小P所在的班级要进行文理分科.他的班级可以用一个 ...

  8. 【BZOJ3894】文理分科 最小割

    [BZOJ3894]文理分科 Description 文理分科是一件很纠结的事情!(虽然看到这个题目的人肯定都没有纠结过) 小P所在的班级要进行文理分科.他的班级可以用一个n*m的矩阵进行描述,每个格 ...

  9. 【bzoj3894】文理分科 网路流

    [bzoj3894]文理分科 2015年3月25日3,4002 Description  文理分科是一件很纠结的事情!(虽然看到这个题目的人肯定都没有纠 结过)  小P所在的班级要进行文理分科.他的班 ...

随机推荐

  1. Ionic设置ion-slide-box不启用(不通过$ionicSlideBoxDelegate)

    猛地一看这个标题,可能觉得多此一举,直接$ionicSlideBoxDelegate. $getByHandle(handle). enableSlide(false)设置不就行了?是的,按理说就是这 ...

  2. android的消息提示(震动与提示音)

    protected AudioManager audioManager; protected Vibrator vibrator; audioManager = (AudioManager)getSy ...

  3. pdf文件的导入导出

    下面的代码自己本人没有尝试过,只是用来做记录,用到时候再说! 最近碰见个需求需要实现导出pdf文件,上网查了下代码资料总结了以下代码.可以成功的实现导出pdf文件. 在编码前需要在网上下载个itext ...

  4. mysql

    这是 <MySQL 必知必会> 的读书总结.也是自己整理的常用操作的参考手册. 使用 MySQL 连接到 MySQL shell>mysql -u root -p Enter pas ...

  5. 数据库实战案例—————记一次TempDB暴增的问题排查

    前言 很多时候数据库的TempDB.日志等文件的暴增可能导致磁盘空间被占满,如果日常配置不到位,往往会导致数据库故障,业务被迫中断. 这种文件暴增很难排查,经验不足的一些运维人员可能更是无法排查具体原 ...

  6. JavaScript如何获取网页url中的参数

    我们可以自定义一个公共函数来实现网页url中的参数获取,返回的是一个数组 GetUrlRequest: function () { var url = decodeURI(location.searc ...

  7. [iOS]技巧集锦:UITableView自定义Cell中的控件无法完全对齐Cell的左边界和右边界

    这是个很诡异的问题,由于一些特殊需求,我的TableView的Cell的背景色是透明,其中的控件会有背景色,第一个控件和最后一个控件我都用IB自动设了约束,对齐Cell的左边界和右边界,但是自动约束很 ...

  8. 【原】移动web滑屏框架分享

    本月26号参加webrebuild深圳站,会上听了彪叔的对初心的讲解,“工匠精神”这个词又一次被提出,也再次引起了我对它的思考.专注一个项目并把它做得好,很好,更好...现实工作中,忙忙碌碌,抱着完成 ...

  9. 多线程IP获取工具(C#)

    以前帮一个朋友写的“IP采集工具”! Control.CheckForIllegalCrossThreadCalls = false; 多线程,测试后还比较稳定. 500线程时候,CPU5%左右,内存 ...

  10. 三维网格精简算法(Quadric Error Metrics)附源码

    在计算机图形应用中,为了尽可能真实呈现虚拟物体,往往需要高精度的三维模型.然而,模型的复杂性直接关系到它的计算成本,因此高精度的模型在几何运算时并不是必须的,取而代之的是一个相对简化的三维模型,那么如 ...