BZOJ3144 切糕
http://www.lydsy.com/JudgeOnline/problem.php?id=3144
思路:如果没有D的限制,那一个竖轴都是一个最小割,每个点向更高的点引一条流量为自己权值的边,那考虑D的情况,就表明在割i高度这条边的时候,不能割它相邻的i-d以下的任何边,因此,我们引一条边从i高度到相邻的i-d高度,流量为inf,这样就能维护D这个条件了
- #include<cstdio>
- #include<cmath>
- #include<algorithm>
- #include<cstring>
- #include<iostream>
- #define inf 0x7fffffff
- int d[][];
- int sz,id[][][],S,T,nodes,P,Q,R,D;
- int tot,go[],next[],first[],flow[];
- int op[],dis[],cnt[],v[][][];
- int read(){
- int t=,f=;char ch=getchar();
- while (ch<''||ch>''){if (ch=='-') f=-;ch=getchar();}
- while (''<=ch&&ch<=''){t=t*+ch-'';ch=getchar();}
- return t*f;
- }
- void insert(int x,int y,int z){
- tot++;
- go[tot]=y;
- next[tot]=first[x];
- first[x]=tot;
- flow[tot]=z;
- }
- void add(int x,int y,int z){
- insert(x,y,z);op[tot]=tot+;
- insert(y,x,);op[tot]=tot-;
- }
- int dfs(int x,int f){
- if (x==T) return f;
- int mn=nodes,sum=;
- for (int i=first[x];i;i=next[i]){
- int pur=go[i];
- if (flow[i]&&dis[pur]+==dis[x]){
- int F=std::min(f-sum,flow[i]);
- int save=dfs(pur,F);
- flow[i]-=save;
- flow[op[i]]+=save;
- sum+=save;
- if (sum==f||dis[S]>=nodes) return sum;
- }
- if (flow[i]) mn=std::min(mn,dis[pur]);
- }
- if (sum==){
- cnt[dis[x]]--;
- if (cnt[dis[x]]==) dis[S]=nodes;
- else {
- dis[x]=mn+;
- cnt[dis[x]]++;
- }
- }
- return sum;
- }
- int main(){
- P=read();Q=read();R=read();
- D=read();
- for (int i=;i<=R+;i++)
- for (int j=;j<=P;j++)
- for (int k=;k<=Q;k++)
- id[i][j][k]=++sz;
- S=;T=sz+;nodes=T+;
- for (int i=;i<=R;i++)
- for (int j=;j<=P;j++)
- for (int k=;k<=Q;k++)
- v[i][j][k]=read();
- for (int j=;j<=P;j++)
- for (int k=;k<=Q;k++)
- add(S,id[][j][k],inf);
- for (int j=;j<=P;j++)
- for (int k=;k<=Q;k++)
- add(id[R+][j][k],T,inf);
- for (int i=;i<=R;i++)
- for (int j=;j<=P;j++)
- for (int k=;k<=Q;k++)
- add(id[i][j][k],id[i+][j][k],v[i][j][k]);
- d[][]=d[][]=;d[][]=d[][]=-;
- for (int i=;i<=R;i++)
- if (i>D)
- for (int j=;j<=P;j++)
- for (int k=;k<=Q;k++)
- for (int l=;l<=;l++){
- int dx=j+d[l][],dy=k+d[l][];
- if (dx<||dx>P||dy<||dy>Q) continue;
- add(id[i][j][k],id[i-D][dx][dy],inf);
- }
- int ans=;
- while (dis[S]<nodes) ans+=dfs(S,inf);
- printf("%d\n",ans);
- return ;
- }
BZOJ3144 切糕的更多相关文章
- HNOI2013 BZOJ3144 切糕
在n×m的表格上,在(x,y)填v的代价是w(x,y,v),且相邻格子填的数相差≤d.求填满表格的最小代价.n,m,maxv≤40. 每个点上选择一个数填,因此将上面的数串起来.考虑限制条件,矛盾条件 ...
- 【BZOJ3144】[HNOI2013]切糕
[BZOJ3144][HNOI2013]切糕 题面 题目描述 经过千辛万苦小 A 得到了一块切糕,切糕的形状是长方体,小 A 打算拦腰将切糕切成两半分给小 B.出于美观考虑,小 A 希望切面能尽量光滑 ...
- 【BZOJ3144】切糕(网络流,最小割)
[BZOJ3144]切糕(网络流,最小割) 题面 BZOJ 题解 这样的类型很有趣 先不考虑相邻距离差不能超过\(D\)的限制 我们考虑答案,显然就是在每个位置选一个最小的高度割就行了 化成最小割的模 ...
- BZOJ3144 Hnoi2013 切糕 【网络流】*
BZOJ3144 Hnoi2013 切糕 Description Input 第一行是三个正整数P,Q,R,表示切糕的长P. 宽Q.高R.第二行有一个非负整数D,表示光滑性要求.接下来是R个P行Q列的 ...
- 【BZOJ3144】[Hnoi2013]切糕 最小割
[BZOJ3144][Hnoi2013]切糕 Description Input 第一行是三个正整数P,Q,R,表示切糕的长P. 宽Q.高R.第二行有一个非负整数D,表示光滑性要求.接下来是R个P行Q ...
- bzoj3144 [HNOI2013]切糕(最小割)
bzoj3144 [HNOI2013]切糕(最小割) bzoj Luogu 题面描述见上 题解时间 一开始我真就把这玩意所说的切面当成了平面来做的 事实上只是说相邻的切点高度差都不超过 $ d $ 对 ...
- Bzoj3144 [Hnoi2013]切糕
Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 1494 Solved: 818 Description Input 第一行是三个正整数P,Q,R,表 ...
- 【BZOJ-3144】切糕 最小割-最大流
3144: [Hnoi2013]切糕 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 1261 Solved: 700[Submit][Status] ...
- BZOJ3144[Hnoi2013]切糕——最小割
题目描述 输入 第一行是三个正整数P,Q,R,表示切糕的长P. 宽Q.高R.第二行有一个非负整数D,表示光滑性要求.接下来是R个P行Q列的矩阵,第z个 矩阵的第x行第y列是v(x,y,z) (1≤x≤ ...
随机推荐
- mysql出现错误“ Every derived table must have its own alias”
Every derived table must have its own alias 这句话的意思是说每个派生出来的表都必须有一个自己的别名 一般在多表查询时,会出现此错误. 因为,进行嵌套查询的时 ...
- wordpress提速插件
auto-remove-googles-url插件,替换前后台国外字体!访问速度有较大提高!可百度搜索auto-remove-googles-url下载,如在wp后台进行插件安装即可
- JAVA获取oracle中sequences的最后一个值
项目中,用到一个序列作单号,框架用的是ssh,在dao层去拿的时候,运行时报错为dual is not mapped,[select *.nextval nextvalue from dual] 后来 ...
- hdu 5167 Fibonacci(预处理)
Problem Description Following is the recursive definition of Fibonacci sequence: Fi=⎧⎩⎨01Fi−1+Fi−2i ...
- animation之translate、scale、alpha、rotate动画效果呈现
动画类型 Android的animation由四种类型组成 XML中 alpha 渐变透明度动画效果 scale 渐变尺寸伸缩动画效果 translate 画面转换位置移动动画效果 rotate 画面 ...
- pyqt一个小例子
# -*- coding: utf-8 -*- __author__ = 'Administrator' from PyQt4 import Qt,QtCore,QtGui import sys,ra ...
- C/C++基础概念
1.类占用的内存大小: 1)在不同位数的操作系统下,各种数据类型所占用的内存大小:32位和64位操作系统 http://blog.csdn.net/b_zhang/article/details/68 ...
- MyEclipse默认编码为GBK,修改为UTF8的方法
MyEclipse 默认编码居然是GBK,js文件默认编码是ISO-....怎么可以这样呢? 都修改成UTF8的方法: 1.windows->Preferences...打开"首选项& ...
- Leetcode_num3_Same Tree
题目: Given two binary trees, write a function to check if they are equal or not. Two binary trees are ...
- windows下删除服务的方法
删除的办法有两个: 办法一: 用sc.exe这个Windows命令 开始——运行——cmd.exe,然后输入sc就可以看到了.使用办法很简单: sc delete "服务名" (如 ...