Bzoj3144 [Hnoi2013]切糕
Time Limit: 10 Sec Memory Limit: 128 MB
Submit: 1494 Solved: 818
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
网络流 最小割
从底层到顶层连边,每条(x,y)纵轴成为一条链,其上边的容量等于割掉的花费,S连底层,顶层连T。
利用INF边限制D,求最小割。
http://blog.csdn.net/thy_asdf/article/details/50428973
↑这里讲得挺详细
- /*by SilverN*/
- #include<iostream>
- #include<algorithm>
- #include<cstring>
- #include<cstdio>
- #include<cmath>
- #include<queue>
- using namespace std;
- const int INF=1e9;
- const int mx[]={,,,-,};
- const int my[]={,,,,-};
- const int mxn=;
- int read(){
- int x=,f=;char ch=getchar();
- while(ch<'' || ch>''){if(ch=='-')f=-;ch=getchar();}
- while(ch>='' && ch<=''){x=x*+ch-'';ch=getchar();}
- return x*f;
- }
- struct edge{
- int v,nxt,f;
- }e[mxn<<];
- int hd[mxn],mct=;
- void add_edge(int u,int v,int c){
- e[++mct].v=v;e[mct].f=c;e[mct].nxt=hd[u];hd[u]=mct;return;
- }
- void insert(int u,int v,int c){
- add_edge(u,v,c);add_edge(v,u,);return;
- }
- int n,m,S,T;
- int P,Q,R;
- int w[][][];
- int d[mxn];
- bool BFS(){
- memset(d,,sizeof d);
- d[S]=;
- queue<int>q;
- q.push(S);
- while(!q.empty()){
- int u=q.front();q.pop();
- for(int i=hd[u];i;i=e[i].nxt){
- int v=e[i].v;
- if(!d[v] && e[i].f){
- d[v]=d[u]+;q.push(v);
- }
- }
- }
- return d[T];
- }
- int DFS(int u,int lim){
- if(u==T)return lim;
- int tmp,f=;
- for(int i=hd[u];i;i=e[i].nxt){
- int v=e[i].v;
- if(d[v]==d[u]+ && e[i].f){
- tmp=DFS(v,min(lim,e[i].f));
- e[i].f-=tmp;
- e[i^].f+=tmp;
- lim-=tmp;
- f+=tmp;
- if(!lim)return f;
- }
- }
- d[u]=;
- return f;
- }
- int Dinic(){
- int res=;
- while(BFS())res+=DFS(S,1e9);
- return res;
- }
- int id[][][];
- void init(){
- int cnt=;
- for(int x=;x<=P;x++)
- for(int y=;y<=Q;y++)
- for(int z=;z<=R;z++){
- id[x][y][z]=++cnt;
- }
- return;
- }
- int main(){
- P=read();Q=read();R=read();
- int i,j,k,D=read();
- init();
- S=;T=P*Q*R+;
- for(i=;i<=R;i++)//z
- for(j=;j<=P;j++)//x
- for(k=;k<=Q;k++){//y
- w[j][k][i]=read();
- }
- for(i=;i<=P;i++)//x
- for(j=;j<=Q;j++){//y
- for(k=;k<=R;k++){//z
- insert(id[i][j][k-],id[i][j][k],w[i][j][k]);
- if(k>D){
- int nx,ny;
- for(int l=;l<=;l++){
- nx=i+mx[l];
- ny=j+my[l];
- if(nx< || nx>P || ny< || ny>Q)continue;
- insert(id[i][j][k],id[nx][ny][k-D],INF);
- }
- }
- }
- insert(id[i][j][R],T,INF);
- }
- int ans=Dinic();
- printf("%d\n",ans);
- return ;
- }
Bzoj3144 [Hnoi2013]切糕的更多相关文章
- BZOJ3144 Hnoi2013 切糕 【网络流】*
BZOJ3144 Hnoi2013 切糕 Description Input 第一行是三个正整数P,Q,R,表示切糕的长P. 宽Q.高R.第二行有一个非负整数D,表示光滑性要求.接下来是R个P行Q列的 ...
- bzoj3144 [HNOI2013]切糕(最小割)
bzoj3144 [HNOI2013]切糕(最小割) bzoj Luogu 题面描述见上 题解时间 一开始我真就把这玩意所说的切面当成了平面来做的 事实上只是说相邻的切点高度差都不超过 $ d $ 对 ...
- bzoj千题计划142:bzoj3144: [Hnoi2013]切糕
http://www.lydsy.com/JudgeOnline/problem.php?id=3144 如果D=2 ,两个点,高度为4,建图如下 #include<queue> #inc ...
- BZOJ3144[Hnoi2013]切糕——最小割
题目描述 输入 第一行是三个正整数P,Q,R,表示切糕的长P. 宽Q.高R.第二行有一个非负整数D,表示光滑性要求.接下来是R个P行Q列的矩阵,第z个 矩阵的第x行第y列是v(x,y,z) (1≤x≤ ...
- BZOJ3144 [Hnoi2013]切糕 【最小割】
题目 输入格式 第一行是三个正整数P,Q,R,表示切糕的长P. 宽Q.高R.第二行有一个非负整数D,表示光滑性要求.接下来是R个P行Q列的矩阵,第z个 矩阵的第x行第y列是v(x,y,z) (1≤x≤ ...
- [BZOJ3144][HNOI2013]切糕(最小割)
题目:http://www.lydsy.com:808/JudgeOnline/problem.php?id=3144 分析:神题不解释 http://www.cnblogs.com/zig-zag/ ...
- 【BZOJ3144】[HNOI2013]切糕
[BZOJ3144][HNOI2013]切糕 题面 题目描述 经过千辛万苦小 A 得到了一块切糕,切糕的形状是长方体,小 A 打算拦腰将切糕切成两半分给小 B.出于美观考虑,小 A 希望切面能尽量光滑 ...
- 【BZOJ3144】[Hnoi2013]切糕 最小割
[BZOJ3144][Hnoi2013]切糕 Description Input 第一行是三个正整数P,Q,R,表示切糕的长P. 宽Q.高R.第二行有一个非负整数D,表示光滑性要求.接下来是R个P行Q ...
- BZOJ 3144: [Hnoi2013]切糕
3144: [Hnoi2013]切糕 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 1495 Solved: 819[Submit][Status] ...
随机推荐
- SE_homework1(第一部分)
题目:写一个能自动生成小学四则运算题目的命令行"软件",分别满足下列各种需求.下面这些需求都可以用命令行参数的形式来指定: a.)除了整数以外,还支持真分数的运算.(例如1 ...
- Oracle Linux(64位)安装64位Oracle10g遇到ins_ctx.mk问题
在Oracle Linux Server Release 5.7上安装64位Oracle 10g 时,遇到如下问题: Error in invoking target 'install' of mak ...
- nginx 301 永久重定向
nginx301跳转设置很简单,配置如下. (配置文件默认为nginx.conf,如果制定了新的配置文件,在新的文件配置即可.) server{ server_name xxx.com www.xxx ...
- SDN:motivation
今天公交车上看了会SDN一本介绍性的书籍,具体名字不记得了.我想,我已经在实验室呆了很久的时间的,接触SDN也有一段时间了.对SDN的一些基本的知识还是需要好好整理一番.当然,这里只是一个随笔,想到什 ...
- makefile 学习笔记
1/ 编写简单makefile test_out: test.o g++ test.o -o test_out test.o: test.cpp test.h g++ -c test.cpp test ...
- 洛谷P1782 旅行商的背包[多重背包]
题目描述 小S坚信任何问题都可以在多项式时间内解决,于是他准备亲自去当一回旅行商.在出发之前,他购进了一些物品.这些物品共有n种,第i种体积为Vi,价值为Wi,共有Di件.他的背包体积是C.怎样装才能 ...
- android第一行代码-6.自定义控件的实现
0.假设一个应用中标题栏控件都是共用的,如果每个activity都需要设置button,绑定方法,那代码就会很臃肿.那我们可以自定义控件,然后继承这个控件就行了. 自定义控件为TitleLayout, ...
- JSHint配置项说明
转自:http://www.jianshu.com/p/4cb23f9e19d3 什么是JSHint? 官方网站这样介绍: JSHint, A Static Code Analysis Tool fo ...
- ThinkPHP常用查询
1.常规 $map2['state'] = 1; $User->where ( $map2 )->find(); 2. OR 查询 $where['name'] = array('neq' ...
- 记录android显示流程
mtk平台: displayclient->deque->数据放入显存->surfaceflinger->分发数据到surfacetexture(OnFrameAvailabl ...