BZOJ 3144 切糕(最小割)
题目链接:http://61.187.179.132/JudgeOnline/problem.php?id=3144
题意:
思路:我们假设没有那个D的限制。这样就简
单了。贪心的话,我们只要在每一个纵轴上选择最小值即可。若看做最小割,我们可以从每一层的(x,y,z)向上一层的(x,y,z+1)连边流量为
v(x,y,z),这样就是增加一层R+1。然后原点向第一层连边,第R+1层向汇点连边。这样就是一个最小割,其实跟上面的贪心是一样的。现在有了D的
限制,我们看看怎么将这个限制加入到现在建好的网络流图中。我们将(x,y,z)向(x,y,z-D)这个格子四周的格子连边正无穷就OK了。这样当我们
选择了某边(x,y,z)到(x,y,z+1)的边时,比如在(x+1,y)
这个轴上我们就不能选择(x+1,y,z-D-1)和(x+1,y,z-D)这条边以及以下的边,因为(x,y,z)向(x+1,y,z-D)有边,因此
构不成割。
struct node
{
int v,cap,next;
};
node edges[N*5];
int head[N],e;
void add(int u,int v,int cap)
{
edges[e].v=v;
edges[e].cap=cap;
edges[e].next=head[u];
head[u]=e++;
}
void Add(int u,int v,int cap)
{
add(u,v,cap);
add(v,u,0);
}
int cur[N],h[N],num[N],pre[N];
int Maxflow(int s,int t,int n)
{
int i;
for(i=0;i<=n;i++) h[i]=num[i]=0,cur[i]=head[i];
int u=s,ans=0,Min,k,x;
while(h[u]<n)
{
if(u==t)
{
Min=INF+1;
for(i=s;i!=t;i=edges[cur[i]].v)
{
x=cur[i];
if(edges[x].cap<Min) Min=edges[x].cap,k=i;
}
ans+=Min; u=k;
for(i=s;i!=t;i=edges[cur[i]].v)
{
x=cur[i];
edges[x].cap-=Min;
edges[x^1].cap+=Min;
}
}
for(i=cur[u];i!=-1;i=edges[i].next)
{
if(edges[i].cap>0&&h[u]==1+h[edges[i].v])
{
break;
}
}
if(i!=-1)
{
cur[u]=i;
pre[edges[i].v]=u;
u=edges[i].v;
}
else
{
if(--num[h[u]]==0) break;
cur[u]=head[u];
x=n;
for(i=head[u];i!=-1;i=edges[i].next)
{
k=edges[i].v;
if(edges[i].cap>0&&h[k]<x) x=h[k];
}
h[u]=x+1;
num[x+1]++;
if(u!=s) u=pre[u];
}
}
return ans;
}
int dx[]={0,0,1,-1};
int dy[]={1,-1,0,0};
int s,t,n,m,K,d;
int a[55][55][55];
int OK(int x,int y)
{
return x>=1&&x<=n&&y>=1&&y<=m;
}
int main()
{
RD(n,m,K); RD(d);
int i,j,k,x=0;
FOR1(i,K+1) FOR1(j,n) FOR1(k,m) a[i][j][k]=++x;
s=0; t=++x;
clr(head,-1);
FOR1(i,n) FOR1(j,m)
{
Add(s,a[1][i][j],INF);
Add(a[K+1][i][j],t,INF);
}
FOR1(i,K) FOR1(j,n) FOR1(k,m)
{
RD(x);
Add(a[i][j][k],a[i+1][j][k],x);
}
FOR1(i,K) if(i-d>=1) FOR1(j,n) FOR1(k,m)
{
FOR0(x,4) if(OK(j+dx[x],k+dy[x]))
{
Add(a[i][j][k],a[i-d][j+dx[x]][k+dy[x]],INF);
}
}
PR(Maxflow(s,t,t+1));
}
BZOJ 3144 切糕(最小割)的更多相关文章
- BZOJ 3144 切糕 最小割
题意: 一个矩阵,每个格子分配一个数,不同的数字,代价不同,要求相邻格子数字差小等于d 求最小代价. 分析: 我猜肯定有人看题目就想到最小割了,然后一看题面理科否决了自己的这个想法…… 没错,就是最小 ...
- bzoj 3144 切糕 —— 最小割
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=3144 每个点拆成 R 个,连成一条链,边上是权值,割掉代表选这一层: 然后每个点的第 t 层 ...
- bzoj3144 [HNOI2013]切糕(最小割)
bzoj3144 [HNOI2013]切糕(最小割) bzoj Luogu 题面描述见上 题解时间 一开始我真就把这玩意所说的切面当成了平面来做的 事实上只是说相邻的切点高度差都不超过 $ d $ 对 ...
- bzoj 3144: [Hnoi2013]切糕 最小割
3144: [Hnoi2013]切糕 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 681 Solved: 375[Submit][Status] ...
- 【BZOJ-3144】切糕 最小割-最大流
3144: [Hnoi2013]切糕 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 1261 Solved: 700[Submit][Status] ...
- [BZOJ 3144] 切糕
Link: BZOJ 3144 传送门 Solution: 发现要把点集分成不连通的两部分,最小割的模型还是很明显的 首先我们将原图转化为$R+1$层,从而将点权化为边权 关键还是在于建图是怎么保证$ ...
- BZOJ3144[Hnoi2013]切糕——最小割
题目描述 输入 第一行是三个正整数P,Q,R,表示切糕的长P. 宽Q.高R.第二行有一个非负整数D,表示光滑性要求.接下来是R个P行Q列的矩阵,第z个 矩阵的第x行第y列是v(x,y,z) (1≤x≤ ...
- 【BZOJ3144】[Hnoi2013]切糕 最小割
[BZOJ3144][Hnoi2013]切糕 Description Input 第一行是三个正整数P,Q,R,表示切糕的长P. 宽Q.高R.第二行有一个非负整数D,表示光滑性要求.接下来是R个P行Q ...
- spoj 839 OPTM - Optimal Marks&&bzoj 2400【最小割】
因为是异或运算,所以考虑对每一位操作.对于所有已知mark的点,mark的当前位为1则连接(s,i,inf),否则连(i,t,inf),然后其他的边按照原图连(u,v,1),(v,u,1),跑最大流求 ...
随机推荐
- SQL Server数据库的三种恢复模式:简单恢复模式、完整恢复模式和大容量日志恢复模式(转载)
SQL Server数据库有三种恢复模式:简单恢复模式.完整恢复模式和大容量日志恢复模式: 1.Simple 简单恢复模式, Simple模式的旧称叫”Checkpoint with truncate ...
- remoting方式
1. WebService跨平台,跨防火墙,但是很抱歉,基于xml速度慢2. RMI(java)/Remoting(.net)平台相关,基于二进制序列化,速度快.3.dcom(com+)spring提 ...
- Elasticsearch DSL语句之连接查询
传统数据库支持的full join(全连接)查询方式. 这种方式在Elasticsearch中使用时非常昂贵的.因此,Elasticsearch提供两种操作可以支持水平扩展 更多内容请参考Elasti ...
- 从Windows 8 安装光盘安装.NET Framework 3.5.1
在安装一些应用时, 例如安装 Oracle, 可能会缺少了安装 .Net FrameWork 3.5.1 无法继续. 最简单的方法当时是,直接进 控制面板, 在添加删除程序内, 选择增加Windows ...
- FreeOnTerminate 的线程在线程管理类的Destroy释放时手工释放的问题
这个问题折腾了我整整一天. 有一个线程管理类,集中管理所有新建的线程, 线程统一在创建时标识 FreeOnTerminate 为 True. 因为有的线程是不限次循环的,所以在管理类最后 Destro ...
- VMWare联网
VMWare提供了三种工作模式,它们是bridged(桥接模式).NAT(网络地址转换模式)和host-only(主机模式). 如果你想利用VMWare在局域网中新建一个独立的虚拟服务器,为局域网用 ...
- db.properties
jdbc.driverclass=oracle.jdbc.driver.OracleDriverjdbc.url=jdbc:oracle:thin:@192.168.201.192:1521:orcl ...
- Install Sogou IM 2.0 in Ubuntu14.04+/Xfce
Ubuntu14.04+ 安装搜狗输入法 搜狗输入法是一款非常友好的输入法产品,从Ubuntu14.04开始对Linux支持,不过只是Debian系的,是Ubuntu优麒麟组引入的.优麒麟是针对国人设 ...
- jquery plugins
jQuery官网插件 jQuery自定义滚动条样式插件 jQuery custom content scroller examples Twitter typeahead typeahead.js t ...
- 设置eclipse补全方法
开MyEclipse 6.0. 1,然后“window”→“Preferences” 2,选择“java”,展开,“Editor”,选择“Content Assist”. 3,选择“Content A ...