3144: [Hnoi2013]切糕
3144: [Hnoi2013]切糕
Time Limit: 10 Sec Memory Limit: 128 MB
Submit: 1526 Solved: 827
[Submit][Status][Discuss]
Description
Input
第一行是三个正整数P,Q,R,表示切糕的长P、 宽Q、高R。第二行有一个非负整数D,表示光滑性要求。接下来是R个P行Q列的矩阵,第z个 矩阵的第x行第y列是v(x,y,z) (1≤x≤P, 1≤y≤Q, 1≤z≤R)。
100%的数据满足P,Q,R≤40,0≤D≤R,且给出的所有的不和谐值不超过1000。
Output
仅包含一个整数,表示在合法基础上最小的总不和谐值。
Sample Input
1
6 1
6 1
2 6
2 6
Sample Output
HINT
最佳切面的f为f(1,1)=f(2,1)=2,f(1,2)=f(2,2)=1
Source
经典最小割模型
题面简化为,一个矩阵,每个格子分配一个数,不同的数字,代价不同,要求相邻格子数字差小等于d
求最小代价
每个格子拆出40个点
连同S与T用40种代价串起来
即 p(x,y,z)->p(x,y,z+1)边权f(x,y,z+1)
然后 p(x,y,z)->p(x’,y’,z-d)边权inf (x,y)与(x’,y’)相邻
把边画出来正确性很显然
#include<cstdio> #include<cstring> #include<queue> using namespace std; int read(){register int x=0;bool f=1;register char ch=getchar();while(ch<'0'||ch>'9'){if(ch=='-')f=0;ch=getchar();}while(ch>='0'&&ch<='9'){x=(x<<3)+(x<<1)+ch-'0';ch=getchar();}return f?x:-x; } const int N=50; const int M=N*N*N; const int inf=2e9; int n,m,S,T,head[M],dis[M],q[M*10]; bool vis[M]; int P,Q,R,D,mp[N][N][N],id[N][N][N],cnt; struct node{int v,next,cap; }e[M*10];int tot=1; void add(int x,int y,int z){e[++tot].v=y;e[tot].cap=z;e[tot].next=head[x];head[x]=tot;e[++tot].v=x;e[tot].cap=0;e[tot].next=head[y];head[y]=tot; } bool bfs(){for(int i=S;i<=T;i++) dis[i]=inf;int h=0,t=1;q[t]=S;dis[S]=0;while(h!=t){int x=q[++h];for(int i=head[x];i;i=e[i].next){int v=e[i].v;if(e[i].cap&&dis[v]>dis[x]+1){dis[v]=dis[x]+1;if(v==T) return 1;q[++t]=v;}}}return dis[T]<inf; } int dfs(int x,int f){if(x==T) return f;int used=0,t;for(int i=head[x];i;i=e[i].next){int v=e[i].v;if(e[i].cap&&dis[v]==dis[x]+1){t=dfs(v,min(f,e[i].cap));e[i].cap-=t;e[i^1].cap+=t;used+=t;f-=t;if(!f) return used;}}if(!used) dis[x]=0;return used; } int dinic(){int res=0;while(bfs()) res+=dfs(S,inf);return res; } int main(){scanf("%d%d%d%d",&P,&Q,&R,&D);for(int i=1;i<=R;i++){for(int j=1;j<=P;j++){for(int k=1;k<=Q;k++){scanf("%d",&mp[i][j][k]);id[i][j][k]=++cnt;}}}S=0,T=cnt+1;for(int i=1;i<=R;i++){for(int j=1;j<=P;j++){for(int k=1;k<=Q;k++){if(i==1)add(S,id[i][j][k],mp[i][j][k]);elseadd(id[i-1][j][k],id[i][j][k],mp[i][j][k]);if(i==R)add(id[i][j][k],T,inf);if(i>D){if(j!=1) add(id[i][j][k],id[i-D][j-1][k],inf);if(j!=P) add(id[i][j][k],id[i-D][j+1][k],inf);if(k!=1) add(id[i][j][k],id[i-D][j][k-1],inf);if(k!=Q) add(id[i][j][k],id[i-D][j][k+1],inf);}}}}printf("%d",dinic());return 0; }
转载于:https://www.cnblogs.com/shenben/p/6261731.html
3144: [Hnoi2013]切糕相关推荐
- BZOJ 3144 [Hnoi2013]切糕
3144: [Hnoi2013]切糕 Description Input 第一行是三个正整数P,Q,R,表示切糕的长P. 宽Q.高R.第二行有一个非负整数D,表示光滑性要求.接下来是R个P行Q列的矩阵 ...
- BZOJ 3144 [HNOI2013]切糕 (最大流+巧妙的建图)
题面:洛谷传送门 BZOJ传送门 最大流神题 把点权转化为边权,切糕里每个点$(i,j,k)$向$(i,j,k+1)$连一条流量为$v(i,j,k)$的边 源点$S$向第$1$层的点连边,第$R+1$ ...
- bzoj 3144: [Hnoi2013]切糕
Description Input 第一行是三个正整数P,Q,R,表示切糕的长P. 宽Q.高R.第二行有一个非负整数D,表示光滑性要求.接下来是R个P行Q列的矩阵,第z个 矩阵的第x行第y列是v(x, ...
- ●BOZJ 3144 [Hnoi2013]切糕
题链: http://www.lydsy.com/JudgeOnline/problem.php?id=3144 题解: "这是一个经典的最小割模型" ---引用自别人的博客 .. ...
- BZOJ.3144.[HNOI2013]切糕(最小割)
题目链接 没有\(D\)的限制怎么做?"最小"我们可以想到最小割,把同一纵轴上的点串起来,分别连到S,T,最小割就是答案.(在这把点权放到前一条边上) 有限制,即如果要割点\(i\ ...
- bzoj-3144 [Hnoi2013]切糕
3144 [Hnoi2013]切糕 题目链接 题目大意 给出一个立方体(长宽高分别P,Q,R),按三维坐标每个点记作(x,y,z),点权为V(x,y,z),对于x,y位置从上到下有z层,但只能选择一层 ...
- 【BZOJ3144】[Hnoi2013]切糕 最小割
[BZOJ3144][Hnoi2013]切糕 Description Input 第一行是三个正整数P,Q,R,表示切糕的长P. 宽Q.高R.第二行有一个非负整数D,表示光滑性要求.接下来是R个P行Q ...
- [HNOI2013]切糕
题目描述 经过千辛万苦小 A 得到了一块切糕,切糕的形状是长方体,小 A 打算拦腰将切糕切成两半分给小 B.出于美观考虑,小 A 希望切面能尽量光滑且和谐.于是她找到你,希望你能帮她找出最好的切割方案 ...
- bzoj3144: [Hnoi2013]切糕(最小割)
传送门 据说这玩意儿叫切糕模型? 我们可以看做有$P*Q$个网格,每个格子有$R$个点,在每一个格子中选一个点,且相邻的点距离不能超过$d$,求最小代价 考虑如果没有限制条件怎么做.我们可以把每一个网 ...
最新文章
- 如果你在2018面试前端,那这篇文章最好看一看!
- Java - 错误: quot;java.lang.ArrayIndexOutOfBoundsException: length=1; index=1quot;
- Foursquare开源Rogue和Full-Loaded两款开发工具
- linux svn磁盘空间满,Linux svn checkout时候总报设备上没有空间
- 【系统分析与设计】软件开发模式之敏捷开发(Scrum)分析
- 实时监控Cat之旅~配置Cat集群需要注意的问题
- 新建android项目导包,Cordova开发App入门(一)创建android项目
- 【转】ASP.NET 2.0 - 导航(Navigation)SiteMap导航菜单关系
- Android 实现手写板技术
- Batch批量替换hosts
- 关闭Oracle 11g的DPR特性
- “天天向上”力量的Python教学实例
- 程序员突然倒地!中软回应称系低血糖引发
- labview非线性曲线拟合Lorenz拟合
- 联想T460p加装固态硬盘
- 【毕业设计】答 辩 技 巧 一(以一个过来人的身份,祝各位答辩 过 过 过)
- 2021-09-24 网安实验-图像隐写-StegSolve之Frame Browser
- 5年多工作经验,工资给15k,要是你,你会接受吗?
- Unity_太阳月亮地球的自转公转脚本
- Android vs iOS 程序开发:我该选哪一个?