题目:https://www.lydsy.com/JudgeOnline/problem.php?id=3144

一根纵轴上切一个点,可以把一根纵轴上的点连成一串来体现。自己的写法是每个点连向前一个点的边上放着权值。

相邻位置高度的限制可以在两条链之间连边来体现;自己的高度是 i 的话,自己向旁边的 i-D-1 连边,这样切了自己就必须切旁边 i-D 及其后的点;旁边的 i+D 向自己连边,这样切了自己就必须切旁边 i+D 及其前的点。这样就能限制住了。

似乎可以只连一条,另一条在做到对方的时候自然会和自己连上;但自己的写法里 i-D-1 和 i+D 不是对称的,所以做到对方的时候不能恰好把自己的那条边连上。可能因为这样连的边多了,自己跑得还挺慢的。

#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int N=,M=,INF=7e7;
int n,m,h,D,t,bh[][][];
int hd[N],xnt=,cur[N],to[M],nxt[M],cap[M];
int dfn[N],q[N],he,tl;
int Mn(int a,int b){return a<b?a:b;}
int rdn()
{
int ret=;bool fx=;char ch=getchar();
while(ch>''||ch<''){if(ch=='-')fx=;ch=getchar();}
while(ch>=''&&ch<='')ret=ret*+ch-'',ch=getchar();
return fx?ret:-ret;
}
void add(int x,int y,int z)
{
to[++xnt]=y;nxt[xnt]=hd[x];hd[x]=xnt;cap[xnt]=z;
to[++xnt]=x;nxt[xnt]=hd[y];hd[y]=xnt;cap[xnt]=;
}
bool bfs()
{
memset(dfn,,sizeof dfn);dfn[]=;
q[he=tl=]=;
while(he<=tl)
{
int k=q[he++];
for(int i=hd[k],v;i;i=nxt[i])
if(cap[i]&&!dfn[v=to[i]])
dfn[v]=dfn[k]+,q[++tl]=v;
}
return dfn[t];
}
int deb;
int dinic(int cr,int flow)
{
if(cr==t)return flow;
int use=;
for(int& i=cur[cr],v;i;i=nxt[i])
if(cap[i]&&dfn[v=to[i]]==dfn[cr]+)
{
int tmp=dinic(v,Mn(flow-use,cap[i]));
if(!tmp)dfn[v]=;
use+=tmp;cap[i]-=tmp;cap[i^]+=tmp;
if(use==flow)return use;
}
return use;
}
int main()
{
n=rdn();m=rdn();h=rdn();D=rdn();
for(int i=;i<=n;i++)
for(int j=;j<=m;j++)
for(int k=;k<=h;k++)
bh[i][j][k]=++t;
t++;
for(int k=;k<=h;k++)
for(int i=;i<=n;i++)
for(int j=;j<=m;j++)
{
int d=rdn(),cr=bh[i][j][k];
add(bh[i][j][k-],cr,d);
int x=k-D-,y=k+D;//D not d!!!
if(x>)
{
if(i>)add(cr,bh[i-][j][x],INF);
if(j>)add(cr,bh[i][j-][x],INF);
if(i<n)add(cr,bh[i+][j][x],INF);
if(j<m)add(cr,bh[i][j+][x],INF);
}
if(y<h)
{
if(i>)add(bh[i-][j][y],cr,INF);
if(j>)add(bh[i][j-][y],cr,INF);
if(i<n)add(bh[i+][j][y],cr,INF);
if(j<m)add(bh[i][j+][y],cr,INF);
}
}
for(int i=;i<=n;i++)for(int j=;j<=m;j++)add(bh[i][j][h],t,INF);
int ans=;
while(bfs())memcpy(cur,hd,sizeof hd),ans+=dinic(,INF);
printf("%d\n",ans);
return ;
}

bzoj 3144 [Hnoi2013]切糕——最小割的更多相关文章

  1. bzoj 3144: [Hnoi2013]切糕 最小割

    3144: [Hnoi2013]切糕 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 681  Solved: 375[Submit][Status] ...

  2. bzoj3144 [HNOI2013]切糕(最小割)

    bzoj3144 [HNOI2013]切糕(最小割) bzoj Luogu 题面描述见上 题解时间 一开始我真就把这玩意所说的切面当成了平面来做的 事实上只是说相邻的切点高度差都不超过 $ d $ 对 ...

  3. BZOJ 3144: [Hnoi2013]切糕

    3144: [Hnoi2013]切糕 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 1495  Solved: 819[Submit][Status] ...

  4. [BZOJ 3144] [Hnoi2013] 切糕 【最小割】

    题目链接:BZOJ - 3144 题目分析 题意:在 P * Q 的方格上填数字,可以填 [1, R] . 在 (x, y) 上填 z 会有 V[x][y][z] 的代价.限制:相邻两个格子填的数字的 ...

  5. bzoj 3144 [Hnoi2013]切糕【最小割+dinic】

    都说了是'切'糕所以是最小割咯 建图: 每个点向下一层连容量为这个点的val的边,S向第一层连容量为inf的边,最后一层向T连容量为自身val的边,即割断这条边相当于\( f(i,j) \)选择了当前 ...

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

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

  7. BZOJ3144[Hnoi2013]切糕——最小割

    题目描述 输入 第一行是三个正整数P,Q,R,表示切糕的长P. 宽Q.高R.第二行有一个非负整数D,表示光滑性要求.接下来是R个P行Q列的矩阵,第z个 矩阵的第x行第y列是v(x,y,z) (1≤x≤ ...

  8. 【刷题】BZOJ 3144 [Hnoi2013]切糕

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

  9. Luogu P3227 [HNOI2013]切糕 最小割

    首先推荐一个写的很好的题解,个人水平有限只能写流水账,还请见谅. 经典的最小割模型,很多人都说这个题是水题,但我还是被卡了=_= 技巧:加边表示限制 在没有距离\(<=d\)的限制时候,我们对每 ...

随机推荐

  1. P2831 愤怒的小鸟(状压dp)

    P2831 愤怒的小鸟 我们先预处理出每个猪两两之间(设为$u,v$)和原点三点确定的抛物线(当两只猪横坐标相等时显然无解) 处理出$u,v$确定的抛物线一共可以经过多少点,记为$lines[u][v ...

  2. 微信小程序:页面配置 page.json

    微信小程序:页面配置 page.json 一.页面配置 page.json 如果整个小程序的风格是蓝色调,那么可以在 app.json 里边声明顶部颜色是蓝色即可. 实际情况可能不是这样,可能你小程序 ...

  3. 20145314郑凯杰《网络对抗技术》可选实验 shellcode注入与Return-to-libc攻击实验

    20145314郑凯杰<网络对抗技术>可选实验 shellcode注入与Return-to-libc攻击实验 1.0 实践内容 Return-to-libc攻击是一种特殊的缓冲区溢出攻击, ...

  4. Qt无法调试Qvector

    现象: 解决: 打开文件 $(VSDIR)\Common7\Packages\Debugger\autoexp.dat (VSDIR是本机Visual Studio的安装目录)把定义QVector和Q ...

  5. openwrt下使用wget出现Failed to allocate uclient context

    一.场景重现 root@OpenWrt:/# wget www.baidu.com Downloading 'www.baidu.com' Failed to allocate uclient con ...

  6. SSH基本管理和配置文件的使用

    服务端:linl_S    IP:10.0.0.15 客户端:lin_C    IP:10.0.0.16   SSHD服务 SSH协议:安全外壳协议.为Secure Shell的缩写.SSH为建立在应 ...

  7. 定义集合属性(WPF)

    在wpf中,定义集合属性时,字段可以使用“ObservableCollection<T>”定义,以保证数据改变时的自动通知功能:属性可以使用“ICollection”定义,保证属性的灵活性 ...

  8. hdu1517找规律

    挺像巴什博弈的,直接递推就能找到规律了,从2开始到9,s win,10到18,o win,18到162,s win,一直向下推进 #include<map> #include<set ...

  9. MyBatis Generator去掉生成的注解

    是不是很讨厌mybatis Generator帮我们生成代码的时候在Mapper和mapper.xml文件中生成的一大堆注解?今天在看MyBatis Generator代码的时候发现,原来mybati ...

  10. java读取和写入浏览器Cookies

    首先我们认识下什么是cookies: cookie实际上是一个存在你硬盘里的数据,但是这些数据很特殊,只能由web应用提交给浏览器帮助存储,并且我们还能读取浏览器存在本地的cookie web应用一般 ...