【BZOJ】3144: [Hnoi2013]切糕
题目链接: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]切糕的更多相关文章
- BZOJ 3144: [Hnoi2013]切糕
3144: [Hnoi2013]切糕 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 1495 Solved: 819[Submit][Status] ...
- bzoj 3144: [Hnoi2013]切糕 最小割
3144: [Hnoi2013]切糕 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 681 Solved: 375[Submit][Status] ...
- [BZOJ 3144] [Hnoi2013] 切糕 【最小割】
题目链接:BZOJ - 3144 题目分析 题意:在 P * Q 的方格上填数字,可以填 [1, R] . 在 (x, y) 上填 z 会有 V[x][y][z] 的代价.限制:相邻两个格子填的数字的 ...
- 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, ...
- bzoj 3144 [Hnoi2013]切糕——最小割
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=3144 一根纵轴上切一个点,可以把一根纵轴上的点连成一串来体现.自己的写法是每个点连向前一个点 ...
- 洛谷 P3227 BZOJ 3144 [HNOI2013]切糕
题目描述 经过千辛万苦小 A 得到了一块切糕,切糕的形状是长方体,小 A 打算拦腰将切糕切成两半分给小 B.出于美观考虑,小 A 希望切面能尽量光滑且和谐.于是她找到你,希望你能帮她找出最好的切割方案 ...
- BZOJ 3144 [Hnoi2013]切糕 ——网络流
[题目分析] 网络流好题! 从割的方面来考虑问题往往会得到简化. 当割掉i,j,k时,必定附近的要割在k-D到k+D上. 所以只需要建两条inf的边来强制,如果割不掉强制范围内的时候,原来的边一定会换 ...
- bzoj 3144 [Hnoi2013]切糕【最小割+dinic】
都说了是'切'糕所以是最小割咯 建图: 每个点向下一层连容量为这个点的val的边,S向第一层连容量为inf的边,最后一层向T连容量为自身val的边,即割断这条边相当于\( f(i,j) \)选择了当前 ...
- 【BZOJ 3144】 3144: [Hnoi2013]切糕 (最小割模型)
3144: [Hnoi2013]切糕 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 1764 Solved: 965 Description Inp ...
随机推荐
- PHP json_encode函数中需要注意的地方
在php中使用 json_encode() 内置函数可以使用得php中的数据更好的与其它语言传递与使用. 这个函数的功能是将数组转换成json数据存储格式: 1 <?php 2 $arr=arr ...
- [转载]CSS教程--字体与文本属性
b>font-family功能:用于改变HTML标志或元素的字体,你可设置一个可用字体清单.浏览器由前向后选用字体.语法:{font-family:字体1,字体2, ... ,字体n} font ...
- JMX堆栈分析
线程堆栈: 线程堆栈也称线程调用堆栈,是虚拟机中线程(包括锁)状态的一个瞬间快照,即系统在某一个时刻所有线程的运行状态,包括每一个线程的调用堆栈,锁的持有情况.虽然不同的虚拟机打印出来的格式有些不同, ...
- What Would you Find out about MS908CV ?
The Autel MaxiSYS commercial car diagnostics scan device, No. MS908CV, performs increased technique ...
- Oracle 数据库实现数据合并:merge
1.使用update进行数据更新 1)最简单的更新 update tablea a set a.price=1.00 2)带条件的数据更新 update tablea a set a.price = ...
- Pony 编程语言介绍
Pony,一种“Rust 遇上 Erlang”的语言,让开发快捷.安全.高效.高并发的程序更简单. 在 Wallaroo Labs,我是工程副总裁,我们正在构建一个用 Pony 编程语言编写的 高性能 ...
- Struts2 概述
1. struts2应用在javaee三层结构中web层框架 2. struts2框架在struts1和webwork基础之上的发展全新的框架 3.struts2 解决的问题: 用户管理的crud操作 ...
- MyEclipse如何修改XML文件默认行宽
1.MyEclipse如何修改XML文件默认行宽 Windows--->Preferences--->搜索xml--->XML--->XML Source--->Form ...
- ES6知识整理(3)--函数的扩展
只有整理过的学习才是有效的学习.也就是学习之后要使用和整理成文,才是真正的学到了... 最近上班有点忙的关系,于是文章更新会慢些.只有晚上加完班之后,空余时间才能学习整理.因此完成一篇也可能要几个晚上 ...
- windows2012R2标准版升级到数据中心版,不用重装系统
windows2012R2标准版升级到数据中心版,不用重装系统 Windows Server 2012 R2是微软的服务器系统,是 Windows Server 2012 的升级版本. Windows ...