BZOJ 3144: [Hnoi2013]切糕
3144: [Hnoi2013]切糕
Time Limit: 10 Sec Memory Limit: 128 MB
Submit: 1495 Solved: 819
[Submit][Status][Discuss]
Description
Input
第一行是三个正整数P,Q,R,表示切糕的长P、 宽Q、高R。第二行有一个非负整数D,表示光滑性要求。接下来是R个P行Q列的矩阵,第z个 矩阵的第x行第y列是v(x,y,z) (1≤x≤P, 1≤y≤Q, 1≤z≤R)。
100%的数据满足P,Q,R≤40,0≤D≤R,且给出的所有的不和谐值不超过1000。
Output
仅包含一个整数,表示在合法基础上最小的总不和谐值。
Sample Input
1
6 1
6 1
2 6
2 6
Sample Output
HINT
最佳切面的f为f(1,1)=f(2,1)=2,f(1,2)=f(2,2)=1
Source
分析:
限制距离模型:
可以把题意看成有p*q个网格,每个网格有r个点,要在每个格子中选一个点,并且相邻的格子选择的点距离不超过d,求最小代价...
考虑如果没有距离限制怎么建图...把每个格子拆成r个点,串成一条链和ST相连,求最小割就是答案...
现在有了距离限制...怎么办??最常用的限制方法就是添加容量为+∞的边...
我们把(i,j,k)向(i',j',k-d)(相邻的格子)连边...这个正确性画一下图YY一下就好...
代码:
- #include<algorithm>
- #include<iostream>
- #include<cstring>
- #include<cstdio>
- //by NeighThorn
- #define inf 0x3f3f3f3f
- using namespace std;
- const int maxn=+,maxm=+;
- int n,m,h,d,S,T,cnt,hd[maxn],fl[maxm],to[maxm],nxt[maxm],pos[maxn];
- int mv[][]={,,,-,,,-,};
- inline bool bfs(void){
- memset(pos,-,sizeof(pos));
- int head=,tail=,q[maxn];
- q[]=S,pos[S]=;
- while(head<=tail){
- int top=q[head++];
- for(int i=hd[top];i!=-;i=nxt[i])
- if(pos[to[i]]==-&&fl[i])
- pos[to[i]]=pos[top]+,q[++tail]=to[i];
- }
- return pos[T]!=-;
- }
- inline int find(int v,int f){
- if(v==T)
- return f;
- int res=,t;
- for(int i=hd[v];i!=-&&f>res;i=nxt[i])
- if(pos[to[i]]==pos[v]+&&fl[i])
- t=find(to[i],min(fl[i],f-res)),res+=t,fl[i]-=t,fl[i^]+=t;
- if(!res)
- pos[v]=-;
- return res;
- }
- inline int dinic(void){
- int res=,t;
- while(bfs())
- while(t=find(S,inf))
- res+=t;
- return res;
- }
- inline void add(int s,int x,int y){
- fl[cnt]=s;to[cnt]=y;nxt[cnt]=hd[x];hd[x]=cnt++;
- fl[cnt]=;to[cnt]=x;nxt[cnt]=hd[y];hd[y]=cnt++;
- }
- signed main(void){
- // freopen("in.txt","r",stdin);
- memset(hd,-,sizeof(hd));
- scanf("%d%d%d%d",&n,&m,&h,&d);
- S=,T=n*m*h+;
- for(int k=,x;k<=h;k++)
- for(int i=;i<=n;i++)
- for(int j=;j<=m;j++){
- scanf("%d",&x);
- if(k==)
- add(x,S,((i-)*m+j-)*h+k);
- else
- add(x,((i-)*m+j-)*h+k-,((i-)*m+j-)*h+k);
- if(k==h)
- add(inf,((i-)*m+j-)*h+k,T);
- }
- for(int i=;i<=n;i++)
- for(int j=;j<=m;j++)
- for(int k=d+;k<=h;k++)
- for(int t=;t<;t++){
- int x=i+mv[t][],y=j+mv[t][];
- if(x>=&&x<=n&&y>=&&y<=m)
- add(inf,((i-)*m+j-)*h+k,((x-)*m+y-)*h+k-d);
- }
- printf("%d\n",dinic());
- return ;
- }//Cap ou pas cap. Cap.
By NeighThorn
BZOJ 3144: [Hnoi2013]切糕的更多相关文章
- 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 ...
随机推荐
- 重磅来袭,使用CRL实现大数据分库分表方案
关于分库分表方案详细介绍 http://blog.csdn.net/bluishglc/article/details/7696085 这里就不作详细描述了 分库分表方案基本脱离不了这个结构,受制于实 ...
- java监控之ManagementFactory分析
The ManagementFactory class is a factory class for getting managed beans for the Java platform. This ...
- YYModel 源码解读(二)之NSObject+YYModel.h (1)
本篇文章主要介绍 _YYModelPropertyMeta 前边的内容 首先先解释一下前边的辅助函数和枚举变量,在写一个功能的时候,这些辅助的东西可能不是一开始就能想出来的,应该是在后续的编码过程中 ...
- Troubleshooting:重新安装Vertica建库后无法启动
环境:RHEL6.5 + Vertica7.1.0-3 1.故障现象 2.重装集群 3.再次定位 4.解决问题 5.总结 1.故障现象 故障现象:Vertica集群安装成功,但是创建数据库后一直无法u ...
- 网络爬虫: 从allitebooks.com抓取书籍信息并从amazon.com抓取价格(3): 抓取amazon.com价格
通过上一篇随笔的处理,我们已经拿到了书的书名和ISBN码.(网络爬虫: 从allitebooks.com抓取书籍信息并从amazon.com抓取价格(2): 抓取allitebooks.com书籍信息 ...
- [WinForm] DataGridView 绑定 DT && ComboBox 列绑定 Dict
一 需求介绍 一般像枚举类型的数据,我们在数据库里存储着诸如(1.2.3.4-)或者("001"."002"."003"-)此类,但是界面 ...
- QML 从无到有 (基础)
小公司,没办法,什么都得自己亲自来. 服务端是MVC,现在需要可PC客户端和移动APP. 考虑到网页应用有很多界面框架,可以做出很漂亮的界面来,就尝试着使用nwjs来实现,可是在使用了2天的nwjs后 ...
- 图表插件Charts.js的使用
Charts.js的介绍自行百度 首先下载Charts.js,官网:http://chartjs.cn/ charts.js 托管在了github上,下载下来后加解压出src中的文件即可.其中有cha ...
- JavaMail发送邮件第一版
首先,我们先来了解一个基本的知识点,用什么工具来发邮件? 简单的说一下,目前用的比较多的客户端:OutLook,Foxmail等 顺便了解一下POP3.SMTP协议的区别: POP3,全名为" ...
- JQ的表单验证
(function () { $("#but").click(function () { if ($("#name").val() == "" ...