BZOJ3144【HNOI2013】切糕
题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=3144
【分析】
所有人都说这是个经典的最小割模型......蒟蒻泪流满面......
建一个r+1层的,每层都是p*q的图,从源出发向第一层连inf的边,从第r+1层上每个点出发向汇连inf的边,对i,j,k与i,j,k+1之间连v(i,j,k)的边。
如果没有高度限制,那么这么做就是在每一条纵轴上选一个点。
因为有高度限制,所以对于每个层数大于d的点,要向x,y坐标相邻的,层数小d的点连一条inf的边。
以p=1,q=2,r=5,d=2为例。(先忽略从右边较高的点连向左边较低的点的那些边)
下面是源,上面是汇。如图所示,如果我把图中的红边割掉,那么图中的蓝边也就没有用了。如果此时把绿边割掉,那么还是存在一条从源到汇的路径;如果割绿色的边上面的边,那么源到汇就没有路径可达了。
仔细理解一下,也就是在左边选了一条边以后,右边的高度小于当前边的边就不能选了。如果把右上向左下连的边也连起来,那么高度就完全限制住了。
然后跑一下最大流就好了。
【代码】
#include <cstdio>
#include <algorithm>
using namespace std;
const int maxl=45,maxn=75000,maxm=maxn<<4,inf=~0U>>1,mov[4][2]={{0,1},{1,0},{0,-1},{-1,0}};int head[maxn],next[maxm],E[maxm],F[maxm],Ecnt;
int id[maxl][maxl][maxl];
int p,q,r,d;
int s,e;inline void Add_Edge(int x,int y,int f) {next[++Ecnt]=head[x];head[x]=Ecnt;E[Ecnt]=y;F[Ecnt]=0;next[++Ecnt]=head[y];head[y]=Ecnt;E[Ecnt]=x;F[Ecnt]=f;}void Init()
{scanf("%d%d%d%d",&p,&q,&r,&d);int cnt=0,x;Ecnt=1;s=++cnt;for (int i=1;i<=r+1;i++)for (int j=1;j<=p ;j++)for (int k=1;k<=q ;k++)id[i][j][k]=++cnt;e=++cnt;for (int i=1;i<=r;i++)for (int j=1;j<=p;j++)for (int k=1;k<=q;k++)scanf("%d",&x),Add_Edge(id[i][j][k],id[i+1][j][k],x);for (int i=1;i<=p;i++)for (int j=1;j<=q;j++)Add_Edge(s,id[1][i][j],inf),Add_Edge(id[r+1][i][j],e,inf);#define nx (j+mov[mv][0])#define ny (k+mov[mv][1])for (int i=d+1;i<=r+1;i++)for (int j=1;j<=p;j++)for (int k=1;k<=q;k++)for (int mv=0;mv<4;mv++)if (id[i][nx][ny])Add_Edge(id[i][j][k],id[i-d][nx][ny],inf);#undef nx#undef ny
}int Q[maxn],Vis[maxn],h[maxn];
bool BFS(int time)
{int top=1,tail=1;Q[1]=s;Vis[1]=time;h[1]=0;while (top<=tail){int x=Q[top++],hx=h[x];for (int i=head[x];i;i=next[i]) if (Vis[E[i]]!=time && F[i^1])h[E[i]]=h[x]+1,Vis[E[i]]=time,Q[++tail]=E[i];if (Vis[e]==time) break;}return Vis[e]==time;
}int DFS(int x,int f)
{if (x==e) return f;int res=f;for (int i=head[x];i && res;i=next[i]) if (h[E[i]]==h[x]+1 && F[i^1]){int d=DFS(E[i],min(F[i^1],res));res-=d;F[i]+=d;F[i^1]-=d;}if (f==res) h[x]=-1;return f-res;
}void Dinic()
{int res=0,time=0;while (BFS(++time)) res+=DFS(s,inf);printf("%d\n",res);
}int main()
{Init();Dinic();return 0;
}
BZOJ3144【HNOI2013】切糕相关推荐
- bzoj-3144 [Hnoi2013]切糕
3144 [Hnoi2013]切糕 题目链接 题目大意 给出一个立方体(长宽高分别P,Q,R),按三维坐标每个点记作(x,y,z),点权为V(x,y,z),对于x,y位置从上到下有z层,但只能选择一层 ...
- bzoj3144: [Hnoi2013]切糕(最小割)
传送门 据说这玩意儿叫切糕模型? 我们可以看做有$P*Q$个网格,每个格子有$R$个点,在每一个格子中选一个点,且相邻的点距离不能超过$d$,求最小代价 考虑如果没有限制条件怎么做.我们可以把每一个网 ...
- bzoj3144 [Hnoi2013]切糕
Description Input 第一行是三个正整数P,Q,R,表示切糕的长P. 宽Q.高R.第二行有一个非负整数D,表示光滑性要求.接下来是R个P行Q列的矩阵,第z个 矩阵的第x行第y列是v(x, ...
- BZOJ3144: [Hnoi2013]切糕
题目:http://www.lydsy.com/JudgeOnline/problem.php?id=3144 把每一条z轴都拿出来,s->(x,y,1),c=f[x][y][1];(x,y,k ...
- 【BZOJ3144】[Hnoi2013]切糕 最小割
[BZOJ3144][Hnoi2013]切糕 Description Input 第一行是三个正整数P,Q,R,表示切糕的长P. 宽Q.高R.第二行有一个非负整数D,表示光滑性要求.接下来是R个P行Q ...
- BZOJ 3144 [Hnoi2013]切糕
3144: [Hnoi2013]切糕 Description Input 第一行是三个正整数P,Q,R,表示切糕的长P. 宽Q.高R.第二行有一个非负整数D,表示光滑性要求.接下来是R个P行Q列的矩阵 ...
- 3144: [Hnoi2013]切糕
3144: [Hnoi2013]切糕 Time Limit: 10 Sec Memory Limit: 128 MB Submit: 1526 Solved: 827 [Submit][Statu ...
- [HNOI2013]切糕
题目描述 经过千辛万苦小 A 得到了一块切糕,切糕的形状是长方体,小 A 打算拦腰将切糕切成两半分给小 B.出于美观考虑,小 A 希望切面能尽量光滑且和谐.于是她找到你,希望你能帮她找出最好的切割方案 ...
- 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, ...
最新文章
- 兵棋推演有助于我们了解哪些战争知识?
- 异或方式找到一组数组中不重复的两个数(同班同学方法)
- 第 10 章 建造者模式【Builder Pattern】
- 阿里云天池 Python训练营Task4: Python数据分析:从0完成一个数据分析实战 学习笔记
- Ubuntu中Unable to acquire the dpkg frontend lock (/var/lib/dpkg/lock-frontend)问题的解决
- Kotlin入门(24)如何自定义视图
- Linux 命令(92)—— locate 命令
- 求出0~999之间的所有“水仙花数”并输出。“水仙花数”是指一个三位数,其各位数字的立方和确好等于该数本身
- 颜色及图片识别原理,颜色识别传感器介绍
- 智能制造-从愿景到实现路径
- IE浏览器假死解决办法
- 服务器装xp系统蓝屏怎么办,安装XP系统出现蓝屏的解决办法
- 项目产品化的版本管控实践方案
- Uedit32设置字体大小
- 测试公开课资料系列02--Postman之chai.js断言应用
- 批量修改linux服务器密码,Linux下批量修改服务器用户密码方法步骤
- 基于android7.0源码修改
- Android 响铃与震动模式的
- android电视投影ipad,【沙发管家】苹果手机, Ipad连接安卓智能电视投屏教程!
- 团队管理的五大核心 | 管理者必读
热门文章
- WFC 就是wifi calling、vowifi
- 管理软件实施(6)——售前都是细节偏执狂
- 考研人常说的“死亡211”和“984.5”是什么学校?
- 微生物组-宏基因组分析专题技术研讨会(2023.4)
- 合肥工业大学嵌入式系统原理实验报告
- 企业选择在线客服系统时需要注意什么?
- 玩转华为ENSP模拟器系列 | 配置LDP本地会话的定时器
- Software Architecture: The Hard Parts Modern Trade-Off Analyses for Distributed Architectures学习笔记
- Python简易web静态服务器程序搭建
- 关于海康威视录像回放功能文件搜索失败问题