题目:https://www.lydsy.com/JudgeOnline/problem.php?id=3144

每个点拆成 R 个,连成一条链,边上是权值,割掉代表选这一层;

然后每个点的第 t 层向四周的点的第 t-d 层连边,就能达到选了第 i 条边,则四周的点必须选 i-d ~ T 范围的边,而对方反过来一连,就限制在 i-d ~ i+d 了;

竟然因为忘记 ct=1 而调了一小时呵呵...

代码如下:

  1. #include<cstdio>
  2. #include<cstring>
  3. #include<algorithm>
  4. #include<queue>
  5. using namespace std;
  6. int const xn=,xm=xn*,inf=1e9;
  7. int n,m,H,hd[xn],ct=,to[xm],nxt[xm],c[xm],dis[xn],cur[xn],S,T;
  8. queue<int>q;
  9. int rd()
  10. {
  11. int ret=,f=; char ch=getchar();
  12. while(ch<''||ch>''){if(ch=='-')f=; ch=getchar();}
  13. while(ch>=''&&ch<='')ret=ret*+ch-'',ch=getchar();
  14. return f?ret:-ret;
  15. }
  16. void ade(int x,int y,int z){to[++ct]=y; nxt[ct]=hd[x]; hd[x]=ct; c[ct]=z;}
  17. void add(int x,int y,int z){ade(x,y,z); ade(y,x,);}
  18. int id(int x,int y,int k){return ((x-)*m+y-)*H+k;}
  19. bool bfs()
  20. {
  21. for(int i=S;i<=T;i++)dis[i]=;
  22. dis[S]=; q.push(S);
  23. while(q.size())
  24. {
  25. int x=q.front(); q.pop();
  26. for(int i=hd[x],u;i;i=nxt[i])
  27. if(!dis[u=to[i]]&&c[i])dis[u]=dis[x]+,q.push(u);
  28. }
  29. return dis[T];
  30. }
  31. int dfs(int x,int fl)
  32. {
  33. if(x==T)return fl;
  34. int ret=;
  35. for(int &i=cur[x],u;i;i=nxt[i])
  36. {
  37. if(dis[u=to[i]]!=dis[x]+||!c[i])continue;
  38. int tmp=dfs(u,min(fl-ret,c[i]));
  39. if(!tmp)dis[u]=;
  40. c[i]-=tmp; c[i^]+=tmp;
  41. ret+=tmp; if(ret==fl)break;
  42. }
  43. return ret;
  44. }
  45. int main()
  46. {
  47. n=rd(); m=rd(); H=rd(); int d=rd(); S=; T=n*m*H+;
  48. for(int t=;t<=H;t++)
  49. for(int i=;i<=n;i++)
  50. for(int j=,x;j<=m;j++)
  51. {
  52. x=rd(); int nw=id(i,j,t);
  53. if(t==)add(S,nw,x); else add(id(i,j,t-),nw,x);
  54. if(t==H)add(nw,T,inf);
  55. if(t<=d)continue; int k=t-d;//
  56. if(i>)add(nw,id(i-,j,k),inf);
  57. if(j>)add(nw,id(i,j-,k),inf);
  58. if(i<n)add(nw,id(i+,j,k),inf);
  59. if(j<m)add(nw,id(i,j+,k),inf);
  60. }
  61. int ans=;
  62. while(bfs())
  63. {
  64. memcpy(cur,hd,sizeof hd);
  65. ans+=dfs(S,inf);
  66. }
  67. printf("%d\n",ans);
  68. return ;
  69. }

bzoj 3144 切糕 —— 最小割的更多相关文章

  1. BZOJ 3144 切糕 最小割

    题意: 一个矩阵,每个格子分配一个数,不同的数字,代价不同,要求相邻格子数字差小等于d 求最小代价. 分析: 我猜肯定有人看题目就想到最小割了,然后一看题面理科否决了自己的这个想法…… 没错,就是最小 ...

  2. bzoj3144 [HNOI2013]切糕(最小割)

    bzoj3144 [HNOI2013]切糕(最小割) bzoj Luogu 题面描述见上 题解时间 一开始我真就把这玩意所说的切面当成了平面来做的 事实上只是说相邻的切点高度差都不超过 $ d $ 对 ...

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

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

  4. BZOJ 3144 切糕(最小割)

    题目链接:http://61.187.179.132/JudgeOnline/problem.php?id=3144 题意: 思路:我们假设没有那个D的限制.这样就简 单了.贪心的话,我们只要在每一个 ...

  5. 【BZOJ-3144】切糕 最小割-最大流

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

  6. [BZOJ 3144] 切糕

    Link: BZOJ 3144 传送门 Solution: 发现要把点集分成不连通的两部分,最小割的模型还是很明显的 首先我们将原图转化为$R+1$层,从而将点权化为边权 关键还是在于建图是怎么保证$ ...

  7. BZOJ3144[Hnoi2013]切糕——最小割

    题目描述 输入 第一行是三个正整数P,Q,R,表示切糕的长P. 宽Q.高R.第二行有一个非负整数D,表示光滑性要求.接下来是R个P行Q列的矩阵,第z个 矩阵的第x行第y列是v(x,y,z) (1≤x≤ ...

  8. 【BZOJ3144】[Hnoi2013]切糕 最小割

    [BZOJ3144][Hnoi2013]切糕 Description Input 第一行是三个正整数P,Q,R,表示切糕的长P. 宽Q.高R.第二行有一个非负整数D,表示光滑性要求.接下来是R个P行Q ...

  9. spoj 839 OPTM - Optimal Marks&&bzoj 2400【最小割】

    因为是异或运算,所以考虑对每一位操作.对于所有已知mark的点,mark的当前位为1则连接(s,i,inf),否则连(i,t,inf),然后其他的边按照原图连(u,v,1),(v,u,1),跑最大流求 ...

随机推荐

  1. php数据类型的true和false

  2. nginx + uWSGI 为 django 提供高并发

    django 的并发能力真的是令人担忧,这里就使用 nginx + uwsgi 提供高并发 nginx 的并发能力超高,单台并发能力过万(这个也不是绝对),在纯静态的 web 服务中更是突出其优越的地 ...

  3. unix网络编程笔记(二)

    第四章笔记 1. 基本Tcpclient/server程序的套接字函数 2. socket函数: int socket(int family,int type,int protocol); (1)so ...

  4. php7下 xhprof安装与使用

    需要测试下 代码的性能,使用了 xhprof + xhgui 1. 下载xhprof, 这里下载吧 :https://github.com/longxinH/xhprof.git 2, 安装 cd x ...

  5. Android Studio support 26.0.0-alpha1 Failed to resolve: com.android.support:appcompat-v7:27.+ 报错解决方法

    AS下如何生成自定义的.jks签名文件, 以及如何生成数字签名 链接:http://www.cnblogs.com/smyhvae/p/4456420.html 链接:http://blog.csdn ...

  6. 深入理解利用new创建对象的执行过程以Person p=new Person("张三",20);为例

    代码如下: class Person { private String name="haha"; private int age; private static String co ...

  7. 【DP】最长不下降子序列问题(二分)

    Description 给你一个长度为n的整数序列,按从左往右的顺序选择尽量多的数字并且满足这些数字不下降. Thinking 朴素dp算法:F[i]表示到第i位为止的最长不下降子序列长度 F[i]= ...

  8. HTTPS协议原理透析

    1.HTTPS本身并非协议,而是标准的HTTP协议架在SSL/TLS协议之上的一种结构.(一种不太合适的说法可以认为是两种协议的叠加).HTTP是工作在OSI7层模型的最上层,就是第7层:Applic ...

  9. NetBeans字体设置

    01.找到自己java字体目录.我的目录是[C:\Program Files\Java\jdk1.7.0_21\jre\lib] 02.复制fontconfig.properties.src, 重命名 ...

  10. Android平台及其架构(部分转载)

    一.Android的系统架构 1.      应用程序 同Android系统一起发布的核心应用程序,如email 客户端,SMS 短消息程序,日历,地图,浏览器,联系人管理程序等. 这些应用程序都是用 ...