题目链接: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. 基于jquery、bootstrap的数据验证插件bootstrapValidator使用

    实时验证用户名是否存在,密码不能和用户名相同,两次密码需要相同,提交之后需要验证返回值: <form id="defaultForm" role="form&quo ...

  2. Linux 用户管理【UID和GID】

    Linux 用户和用户组管理 Linux系统是一个多用户多任务的分时操作系统,任何一个要使用系统资源的用户,都必须首先向系统管理员申请一个账号,然后以这个账号的身份进入系统. 用户的账号一方面可以帮助 ...

  3. Python+OpenCV图像处理(一)——读取显示一张图片

    先在此处先声明,后面学习python+opencv图像处理时均参考这位博主的博文https://blog.csdn.net/u011321546/article/category/7495016/2? ...

  4. 前端框架VUE----箭头函数

    箭头函数 基本语法: ES6允许使用“箭头”(=>)定义函数 var f = a = > a //等同于 var f = function(a){ return a; } 如果箭头函数不需 ...

  5. 3D模型文字动画

    <!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8&quo ...

  6. spring中的springSecurity安全框架的环境搭建

    首先在web.xml文件中配置监听器和过滤器 <!--监听器 加载安全框架的核心配置文件到spring容器中--> <context-param> <param-name ...

  7. Cannot assign “A1”: “B1” must be a “C1” instance.

    应用 django FORM 录入数据 必须 item_id supplier_id 不能item, supplier

  8. redis 数据统计(用自增id防止同一秒并发过大没统计成功)

    Redis 缓存保存某段时间累加的数值,加入最大id防止同一秒并发过大,导致只统计了执行时同一秒的部分数据,而同一秒另一部分数据在下次累加时没有统计到缓存中 //coin总数 public funct ...

  9. centos6二进制安装mysql5.5

    centos 6.5,安装mysql 5.5.60 所需安装包mysql-5.5.60-linux-glibc2.12-x86_64.tar.gz.ncurses-devel-5.7-4.200902 ...

  10. 从技术专家到管理者的思路转变(V1)

    作为技术专家出身的管理者,是一种优势(你所做的很多决策可能比非技术出身的管理者更加具有可行性和性价比).也是一种劣势(你可能会过于自恋自己的技术优势).这取决于你在接下去的职业生涯中,如何取舍你的技术 ...