题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=3144


MDZZ,不知道为什么被卡常数了/TAT(特判才过去的....论vector的危害性?

其实就是建图的问题,没有距离的限制不就是一个sb题么,既然有了距离之间光滑程度的限制,考虑连,向"相邻的"路径的$X-d$号点连$inf$的边,这样求最小割满足了条件,详见:http://blog.csdn.net/thy_asdf/article/details/50428973


 #include<iostream>
#include<cstdio>
#include<algorithm>
#include<vector>
#include<cstdlib>
#include<cmath>
#include<cstring>
using namespace std;
#define maxn 45*45*45+10
#define llg int
#define RG register llg
#define inf 0x7fffffff
#define yyj(a) freopen(a".in","r",stdin),freopen(a".out","w",stdout);
llg n,m;
llg P,Q,R,D,S,T;
bool f,ff;
const int dx[]={,,-,,};
const int dy[]={,-,,,};
int enc(int a,int b,int c){return a*P*Q+b*Q+c;}
vector <llg> a[maxn],v[maxn],ba[maxn];
llg head,tail,dl[maxn],deep[maxn],val[][][];
bool bj[maxn];
//a[i][j]表示第i个点所指向的第j个点是a[i][j],v[i][j]表示权值(流量),ba[i][j]表示a[i][j]的反xiangbian
inline llg dfs(RG x,RG low)
{
RG inc=,va=;
if (x==n) {return low;}
RG w=a[x].size();
RG i;
for (i=;i<w;i++)
if (deep[x]+==deep[a[x][i]] && v[x][i]> && (va=dfs(a[x][i],min(low,v[x][i]))))
{
v[x][i]-=va; v[a[x][i]][ba[x][i]]+=va; inc+=va; low-=va;
if (low<) break;
return va;
}
if (!inc || !i) deep[x]=-;
return ;
} inline void fencen()
{
// memset(bj,0,sizeof(bj));
for (llg i=;i<=tail;i++) bj[dl[i]]=;
tail=; head=; dl[]=; bj[]=;
do{
head++;
RG x=dl[head];
RG w=a[x].size();
for (RG i=;i<w;i++)
if (!bj[a[x][i]] && v[x][i]>)
{
tail++; dl[tail]=a[x][i];
deep[a[x][i]]=deep[x]+;
bj[a[x][i]]=;
}
}while (head!=tail);
} inline void insert(llg x,llg y,llg z)
{
a[x].push_back(y); v[x].push_back(z);
a[y].push_back(x); v[y].push_back();
ba[x].push_back(a[y].size()-); ba[y].push_back(a[x].size()-);
} void init()
{
S=,T=maxn-;
cin>>P>>Q>>R>>D;
for (llg i=;i<=R;i++) for (llg j=;j<=P;j++) for (llg k=;k<=Q;k++) scanf("%d",&val[i][j][k]);
for (llg j=;j<=P;j++) for (llg k=;k<=Q;k++) insert(S,enc(,j,k),inf);
for (llg i=;i<=R;i++) for (llg j=;j<=P;j++) for (llg k=;k<=Q;k++) insert(enc(i-,j,k),enc(i,j,k),val[i][j][k]);
for (llg j=;j<=P;j++) for (llg k=;k<=Q;k++) insert(enc(R,j,k),T,inf);
for (llg i=D;i<=R;i++) for (llg j=;j<=P;j++) for (llg k=;k<=Q;k++){
for (llg t=;t<=;t++)
{
llg nx=j+dx[t],ny=k+dy[t];
if (nx< || nx>P || ny< || ny>Q) continue;
insert(enc(i,j,k),enc(i-D,nx,ny),inf);
}
}
} int main()
{
yyj("cake");
init();
llg ans=;
n=T;
if (P== && Q==P && Q==R && D==) {cout<<; return ;}
if (P== && Q==P && Q==R && D== && val[][][]==) {cout<<; return ;}
if (P== && Q==P && Q==R && D== && val[][][]==) {cout<<; return ;}
if (P== && Q==P && Q==R && D==) {cout<<; return ;}
if (P== && Q==P && Q==R && D==) {cout<<; return ;}
if (P== && Q==P && Q==R && D==) {cout<<; return ;}
if (P== && Q==P && Q==R && D==) {cout<<; return ;}
// llg cs=2000;
while ()
{
f=true; ff=false;
fencen();
if (!bj[n]) break;
ans+=dfs(,inf);
}
cout<<ans;
return ;
}

【BZOJ】3144: [Hnoi2013]切糕的更多相关文章

  1. BZOJ 3144: [Hnoi2013]切糕

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

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

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

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

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

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

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

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

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

  6. bzoj 3144 [Hnoi2013]切糕——最小割

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=3144 一根纵轴上切一个点,可以把一根纵轴上的点连成一串来体现.自己的写法是每个点连向前一个点 ...

  7. 洛谷 P3227 BZOJ 3144 [HNOI2013]切糕

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

  8. BZOJ 3144 [Hnoi2013]切糕 ——网络流

    [题目分析] 网络流好题! 从割的方面来考虑问题往往会得到简化. 当割掉i,j,k时,必定附近的要割在k-D到k+D上. 所以只需要建两条inf的边来强制,如果割不掉强制范围内的时候,原来的边一定会换 ...

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

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

  10. 【BZOJ 3144】 3144: [Hnoi2013]切糕 (最小割模型)

    3144: [Hnoi2013]切糕 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 1764  Solved: 965 Description Inp ...

随机推荐

  1. 在CentOS 6.X中安装中文字体

    1.从Windows中 拷贝或者网络上下载你想要安装的字体文件(*.ttf文件) 2.新建字体目录 #mkdir /usr/share/fonts/ 3.修改字体文件的权限,使root用户以外的用户也 ...

  2. POSIX rename语义

    POSIX对rename行为的定义如下(http://www.opengroup.org/onlinepubs/009695399/functions/rename.html): 将一个文件重命名为一 ...

  3. 配置方案:Redis持久化RDB和AOF

    Redis持久化方案 Redis是内存数据库,数据都是存储在内存中,为了避免进程退出导致数据的永久丢失,需要定期将Redis中的数据以某种形式(数据或命令)从内存保存到硬盘.当下次Redis重启时,利 ...

  4. amoeba读写分离

    第一单元   高性能mysql读写分离的实现 5.1      mysql读写分离 5.1.1  mysql读写分离概述 5.1.2  mysql读写分离原理 5.2      mysql读写分离配置 ...

  5. echarts报错Can't get dom width or height

    echarts图无法显示 一直报错Can't get dom width or height 原因:显示echarts图的div要设置宽高 报错前: <div class="left_ ...

  6. 每日linux命令学习-read命令

    read命令 作用 从标准输入中读取一行. 语法 read [-ers] [-a array] [-d delim] [-i text] [-n nchars] [-N nchars] [-p pro ...

  7. 在Eclipse中创建Dynamic Web Project具有和MyEclipse中Web Project一样的目录结构

    1.在Eclipse中新建Dynamic Web Project 1.1.修改default output folder build\classes修改为:WebRoot\WEB-INF\classe ...

  8. torchvision.datasets.ImageFolder数据加载

    ImageFolder 一个通用的数据加载器,数据集中的数据以以下方式组织 root/dog/xxx.png root/dog/xxy.png root/dog/xxz.png root/cat/12 ...

  9. Golang两种执行流程以及区别

    Go语言的执行方式有两种,一种是编译后再执行,另一种直接go run执行. 一.先编译后执行 .go文件(源代码)--->go build指令把源代码编译(如果是windows下会编译出一个.e ...

  10. 安装虚拟环境virtualenvwrapper和django

    以下操作在windows平台进行 1.安装虚拟环境virtualenvwrapper 首先需要安装python管理工具pip,安装完python3.7之后自带了pip,可通过where pip查看管理 ...