BZOJ 1976 能量魔方 Cube(最小割)
题目链接:http://61.187.179.132/JudgeOnline/problem.php?id=1976
题意:给出一个n*n*n的立方体。每个小单位为字母P或者字母N。相邻两个小单位字母不同则总价值加1。现在有些小单位的字母已经确定,合理安排其他小单位的字母使得总价值最大?
思路:显然,若所有小单位都未确定,则进 行黑白染色即PN相间的安排时价值最大。基于这样的考虑,我们将所有小单位分成黑白两种颜色,设为A和B。显然同一种颜色之间是不会相邻的。设S集合为A 集合中的P(就是已经给出的)和B集合中的N,T集合为A集合中的N和B集合中的P,并且与ST的流量为INF。然后相邻的小单位之间连边,并记录边的数 量ans,那么ans减去最小割即是答案。为什么呢?显然,若原来给出的没有一个NP,则最小割为0,那么答案就是边的数量。有了一些NP,那么割边不会 是与ST的连边(因为这些边流量为INF),因此割边就是原来相邻小单位的边,而割到了这些边就相当于是这两个小单位染色相同,因此答案减去1,也就是每 有一个这样的割边答案就减去1。因此减去所有割就是答案。最小割决定答案最大。
struct node { int v,cap,next; }; node edges[N]; int head[N],e; void add(int u,int v,int cap) { edges[e].v=v; edges[e].cap=cap; edges[e].next=head[u]; head[u]=e++; } void Add(int u,int v,int cap) { add(u,v,cap); add(v,u,0); } int pre[N],cur[N],num[N],h[N]; int Maxflow(int s,int t,int n) { int i; for(i=0;i<=n;i++) cur[i]=head[i],num[i]=h[i]=0; int u=s,Min,k,v; int ans=0; while(h[u]<n) { if(u==t) { Min=INF; for(i=s;i!=t;i=edges[cur[i]].v) { k=cur[i]; if(edges[k].cap<Min) Min=edges[k].cap,v=i; } ans+=Min; u=v; for(i=s;i!=t;i=edges[cur[i]].v) { k=cur[i]; edges[k].cap-=Min; edges[k^1].cap+=Min; } } for(i=cur[u];i!=-1;i=edges[i].next) { if(edges[i].cap>0&&h[u]==h[edges[i].v]+1) break; } if(i!=-1) { cur[u]=i; pre[edges[i].v]=u; u=edges[i].v; } else { if(--num[h[u]]==0) break; k=n; cur[u]=head[u]; for(i=head[u];i!=-1;i=edges[i].next) { if(edges[i].cap>0&&h[edges[i].v]<k) { k=h[edges[i].v]; } } num[k+1]++; h[u]=k+1; if(u!=s) u=pre[u]; } } return ans; } int n,m,a[45][45][45]; int dx[]={1,0,0,-1,0,0}; int dy[]={0,1,0,0,-1,0}; int dz[]={0,0,1,0,0,-1}; char s[45][45][45]; int ok(int x) { return x&1; } int main() { RD(n); int i,j,k,r=0; FOR1(i,n) FOR1(j,n) FOR1(k,n) a[i][j][k]=++r; int S=0,T=n*n*n+1; clr(head,-1); int x,y,z,ans=0; FOR1(i,n) FOR1(j,n) RD(s[i][j]+1); FOR1(i,n) FOR1(j,n) FOR1(k,n) { FOR0(r,6) { x=i+dx[r]; y=j+dy[r]; z=k+dz[r]; if(x>=1&&x<=n&&y>=1&&y<=n&&z>=1&&z<=n) { ans++; Add(a[i][j][k],a[x][y][z],1); } } if(s[i][j][k]!='?') { if(ok(i+j+k)&&s[i][j][k]=='P'||!ok(i+j+k)&&s[i][j][k]=='N') { Add(S,a[i][j][k],INF); } else Add(a[i][j][k],T,INF); } } ans>>=1; ans-=Maxflow(S,T,T+1); PR(ans); }
BZOJ 1976 能量魔方 Cube(最小割)的更多相关文章
- Bzoj 1976: [BeiJing2010组队]能量魔方 Cube 最小割,最大流
1976: [BeiJing2010组队]能量魔方 Cube Time Limit: 10 Sec Memory Limit: 64 MBSubmit: 879 Solved: 304[Submi ...
- 【BZOJ-1976】能量魔方Cube 最小割 + 黑白染色
1976: [BeiJing2010组队]能量魔方 Cube Time Limit: 10 Sec Memory Limit: 64 MBSubmit: 884 Solved: 307[Submi ...
- 【BZOJ1976】[BeiJing2010组队]能量魔方 Cube 最小割
[BZOJ1976][BeiJing2010组队]能量魔方 Cube Description 小C 有一个能量魔方,这个魔方可神奇了,只要按照特定方式,放入不同的 能量水晶,就可以产生巨大的能量. 能 ...
- BZOJ1976: [BeiJing2010组队]能量魔方 Cube
1976: [BeiJing2010组队]能量魔方 Cube Time Limit: 10 Sec Memory Limit: 64 MBSubmit: 832 Solved: 281[Submi ...
- 【bzoj1976】[BeiJing2010组队]能量魔方 Cube 网络流最小割
题目描述 一个n*n*n的立方体,每个位置为0或1.有些位置已经确定,还有一些需要待填入.问最后可以得到的 相邻且填入的数不同的点对 的数目最大. 输入 第一行包含一个数N,表示魔方的大小. 接下来 ...
- [BZOJ 3144] [Hnoi2013] 切糕 【最小割】
题目链接:BZOJ - 3144 题目分析 题意:在 P * Q 的方格上填数字,可以填 [1, R] . 在 (x, y) 上填 z 会有 V[x][y][z] 的代价.限制:相邻两个格子填的数字的 ...
- [BZOJ 3894] 文理分科 【最小割】
题目链接:BZOJ - 3894 题目分析 最小割模型,设定一个点与 S 相连表示选文,与 T 相连表示选理. 那么首先要加上所有可能获得的权值,然后减去最小割,即不能获得的权值. 那么对于每个点,从 ...
- BZOJ 2039 人员雇佣 二元关系 最小割
题面太长了,请各位自行品尝—>人员雇佣 分析: 借用题解的描述: a.选择每个人有一个代价Ai b.如果有两个人同时选择就可以获得收益Ei,j c.如果一个人选择另一个不选会产生代价Ei,j 这 ...
- BZOJ 2007 海拔(平面图最小割-最短路)
题目链接:http://61.187.179.132/JudgeOnline/problem.php?id=2007 题意:给出一个n*n的格子,那么顶点显然有(n+1)*(n+1)个.每两个相邻顶点 ...
随机推荐
- AP模块的发票过账后关联对应的凭证编号。
--AP发票 SELECT GJH.NAME,GJH.LEDGER_ID,GJH.JE_CATEGORY, GJH.JE_SOURCE,XDL.SOURCE_DISTRIBUTION_TYPE, XT ...
- LDA-math-文本建模
http://cos.name/2013/03/lda-math-text-modeling/ 4. 文本建模 我们日常生活中总是产生大量的文本,如果每一个文本存储为一篇文档,那每篇文档从人的观察来说 ...
- 全志A20芯片用于启动的SD卡的布局
起始 大小 内容 0 8KB 存放分区表等 8 24KB SPL loader 32 512KB u-boot 544 128KB environment 672 352KB 保留 1024 - 用于 ...
- URL 中#号,? ,&的作用 (摘抄整理 链接为学习地址)
1. 一峰的网络日志:http://www.ruanyifeng.com/blog/2011/03/url_hash.html get: 1.页面滚动到指定页面的指定位置 (eg: http://ww ...
- TVideoGrabber如何并行处理多摄像头
大家都知道 TVideoGrabber是一款支持包括C#..NET.VB.NET.C++.Delphi.C++Builder和ActiveX平台在内的视频处理控件,可以捕捉视频,也可以作为多媒体播放器 ...
- V4L2应用程序框架-二【转】
本文转载自:http://blog.csdn.net/tommy_wxie/article/details/11371439 V4L2驱动框架 主设备号: 81 次设备号: 0-63 64 ...
- TI CC2541的整体目标
1. App端会发送一定数量的byte过来蓝牙, 每2个byte是一个汉字的编码. 2. 拿到汉字编码之后, 统计字符数量, 然后通过SPI, 搜索编码 3. 收到的编码, 每个汉字字符有32个byt ...
- 创建laravel项目时打开浏览器常见错误
1.Whoops, looks like something went wrong. 打开:D:\java\wamp\www\subway\app\config\app.php 修改:'debug' ...
- android 中通过代码创建控件
package bvb.de.openadbwireless.circle; import android.annotation.TargetApi; import android.app.Activ ...
- Docker第三方项目小结
软件项目的成功常常根据其催生的生态系统来衡量.围绕或基于核心技术构建的项目增添了功能和易用性,它们常常日臻完善.Docker就是一个典例,有众多第三方项目扩展.补充或改进Docker. •Docker ...