题链:

http://www.lydsy.com/JudgeOnline/problem.php?id=3144

题解:

"这是一个经典的最小割模型" ---引用自别人的博客
。。。。。。。。。。。。。
苦酒入喉心作痛,我怎么就是建不出图呢?

先考虑部分限制:
1).每个纵轴上只选择一个点。
    这个建图比较简单,如下,(把点权放在它上方的边上):

(x,y,z) –> (x,y,z+1) : (w[x][y][z])
   
    只用求一个最小割即可。
另外,再添加另一个限制:
2).相邻的纵轴上选择的点的竖直距离不超过D(假设 D=1)

(x,y,z) –> (x',y',z-D ) : (INF)   (x,y)与(x',y'相邻)
    这个就只有 kou nao dai 了。。。
    因为在上图中每条路上只割一条边。
    那么假设在左边的路上割了 E1。
    那么显然,只能在右边的路上割黄色区域。
    如果建一条绿边(竖直向下D个单位)的话,显然右边黄色区域下面的边就割不了了。
   
    那么又是如何限制黄色区域的上界的呢。
    考虑如果选择割了右边黄色区域上面的某一条边 E2,
    那类似绿边那样的建一条蓝色的边,
    显然这无法形成一个割,因为存在可继续增广的路。
     
    所以为了形成最下割,在右边的选择区域就固定在了黄色区域里。

代码:

#include<queue>
#include<cstdio>
#include<cstring>
#include<iostream>
#define MAXN 100050
#define MAXM 1000050
#define INF 0x3f3f3f3f
using namespace std;
const int mv[4][2]={{0,1},{0,-1},{1,0},{-1,0}};
struct Edge{int to[MAXM],cap[MAXM],nxt[MAXM],head[MAXN],ent;void Init(){ent=2;}void Adde(int u,int v,int w){to[ent]=v; cap[ent]=w; nxt[ent]=head[u]; head[u]=ent++;to[ent]=u; cap[ent]=0; nxt[ent]=head[v]; head[v]=ent++;}int Next(int i,bool type){return type?head[i]:nxt[i];}
}E;
int d[MAXN],cur[MAXN];
int P,Q,R,D,S,T;
int idx(int x,int y,int z){return P*Q*(z-1)+(x-1)*Q+y;
}
bool bfs(){queue<int>q; int u,v;memset(d,0,sizeof(d));q.push(S); d[S]=1;while(!q.empty()){u=q.front(); q.pop();for(int i=E.Next(u,1);i;i=E.Next(i,0)){v=E.to[i];if(d[v]||!E.cap[i]) continue;d[v]=d[u]+1; q.push(v);}}return d[T];
}
int dfs(int u,int reflow){if(u==T||!reflow) return reflow;int flowout=0,f,v;for(int &i=cur[u];i;i=E.Next(i,0)){v=E.to[i];if(d[v]!=d[u]+1) continue;f=dfs(v,min(reflow,E.cap[i]));flowout+=f; E.cap[i^1]+=f;reflow-=f; E.cap[i]-=f;if(!reflow) break;}if(!flowout) d[u]=0;return flowout;
}
int Dinic(){int flow=0;while(bfs()){memcpy(cur,E.head,sizeof(E.head));flow+=dfs(S,INF);}return flow;
}
int main()
{E.Init();scanf("%d%d%d%d",&P,&Q,&R,&D);S=P*Q*R+1; T=P*Q*R+2;for(int k=1,x,_i,_j,to;k<=R;k++)for(int i=1;i<=P;i++)for(int j=1;j<=Q;j++){ scanf("%d",&x);if(k==R) to=T; else to=idx(i,j,k+1);E.Adde(idx(i,j,k),to,x);if(k-D<=0) continue;for(int l=0;l<4;l++){_i=i+mv[l][0];_j=j+mv[l][1];if(_i<1||P<_i||_j<1||Q<_j) continue;E.Adde(idx(i,j,k),idx(_i,_j,k-D),INF);}}for(int i=1;i<=P;i++)for(int j=1;j<=Q;j++)E.Adde(S,idx(i,j,1),INF);int ans=Dinic();printf("%d",ans);return 0;
}

转载于:https://www.cnblogs.com/zj75211/p/7931437.html

●BOZJ 3144 [Hnoi2013]切糕相关推荐

  1. BZOJ 3144 [Hnoi2013]切糕

    3144: [Hnoi2013]切糕 Description Input 第一行是三个正整数P,Q,R,表示切糕的长P. 宽Q.高R.第二行有一个非负整数D,表示光滑性要求.接下来是R个P行Q列的矩阵 ...

  2. 3144: [Hnoi2013]切糕

    3144: [Hnoi2013]切糕 Time Limit: 10 Sec  Memory Limit: 128 MB Submit: 1526  Solved: 827 [Submit][Statu ...

  3. BZOJ 3144 [HNOI2013]切糕 (最大流+巧妙的建图)

    题面:洛谷传送门 BZOJ传送门 最大流神题 把点权转化为边权,切糕里每个点$(i,j,k)$向$(i,j,k+1)$连一条流量为$v(i,j,k)$的边 源点$S$向第$1$层的点连边,第$R+1$ ...

  4. bzoj 3144: [Hnoi2013]切糕

    Description Input 第一行是三个正整数P,Q,R,表示切糕的长P. 宽Q.高R.第二行有一个非负整数D,表示光滑性要求.接下来是R个P行Q列的矩阵,第z个 矩阵的第x行第y列是v(x, ...

  5. BZOJ.3144.[HNOI2013]切糕(最小割)

    题目链接 没有\(D\)的限制怎么做?"最小"我们可以想到最小割,把同一纵轴上的点串起来,分别连到S,T,最小割就是答案.(在这把点权放到前一条边上) 有限制,即如果要割点\(i\ ...

  6. bzoj-3144 [Hnoi2013]切糕

    3144 [Hnoi2013]切糕 题目链接 题目大意 给出一个立方体(长宽高分别P,Q,R),按三维坐标每个点记作(x,y,z),点权为V(x,y,z),对于x,y位置从上到下有z层,但只能选择一层 ...

  7. 【BZOJ3144】[Hnoi2013]切糕 最小割

    [BZOJ3144][Hnoi2013]切糕 Description Input 第一行是三个正整数P,Q,R,表示切糕的长P. 宽Q.高R.第二行有一个非负整数D,表示光滑性要求.接下来是R个P行Q ...

  8. [HNOI2013]切糕

    题目描述 经过千辛万苦小 A 得到了一块切糕,切糕的形状是长方体,小 A 打算拦腰将切糕切成两半分给小 B.出于美观考虑,小 A 希望切面能尽量光滑且和谐.于是她找到你,希望你能帮她找出最好的切割方案 ...

  9. bzoj3144: [Hnoi2013]切糕(最小割)

    传送门 据说这玩意儿叫切糕模型? 我们可以看做有$P*Q$个网格,每个格子有$R$个点,在每一个格子中选一个点,且相邻的点距离不能超过$d$,求最小代价 考虑如果没有限制条件怎么做.我们可以把每一个网 ...

最新文章

  1. 没有绝对安全的系统!激光瞄准二极管,25米外从被物理隔绝的计算机中窃取数据...
  2. python图片比对、自动化测试,腾讯优图及知脸(ZKface)人脸比对接口测试(python)
  3. 我是怎么保存公众号历史文章合集到本地的?当然是用python了!
  4. [转载] 七龙珠第一部——第002话 布玛没有尾巴
  5. 如何检测链表中是存在循环
  6. 【C++基础】异常匹配与内建异常类
  7. 使用记事本写java程序并编译运行过程
  8. 【iOS开发】理解Action、IBACtion、Action Connection
  9. .Net 4.0 之 Dynamic 动态类型
  10. 365RSS.cn = Web3.0?
  11. 阿里云盘内测申请_阿里云网盘开放内测申请,网盘行业又成香饽饽了?
  12. 碰到 oracle 10g ORA-00257
  13. Debug无忧!清华校友打造Python调试神器!
  14. SEO的关键字分析的浅析
  15. H-Index H指数
  16. b、B、kb、kB单位
  17. 【Mathtype】安装Mathtype后,word无法粘贴的问题
  18. 原始LBP/Uniform LBP编程实现与直方图
  19. 猫猫学IOS(四)UI之半小时搞定Tom猫
  20. 盘点那些免费好用的高清录屏软件,7款宝藏软件(2023年新版)

热门文章

  1. 2021-09-21 我的实践(二) 之多系统安装(Windows10+优启通、RedHat、UOS、Ubuntu)
  2. canvas动画心得
  3. nginx 启动关闭命令
  4. php 高级留言板,PHP留言板(范例)
  5. 8086汇编实验(十题可用)
  6. vscode插件php注释插件PHP DocBlocker
  7. 【校招VIP】秋招进行中,时间来不及?简历投递过不去?你需要有特色亮点的项目
  8. r语言时间序列图_R中的时间序列图
  9. 中式红木装修,中式装修别致的古典风
  10. drawio 画弯曲的线框 漫画风