传送门
最小割,主要考查建边的思路。本蒟蒻也是看了好几位大佬的博客才看懂。比如:
参考1
参考2
(x,y,z)连接(x,y,z+1)容量为f(x,y,z)
(x,y,z)连接(x’,y’,z-d)容量为inf,其中 (x,y)与(x’,y’)相邻
然后跑一边最小割即可。

注意
立体图形的点编号不要写成

int num(int i,int j,int k) {return (k-1)*n*m+(i-1)*n+j;
}

为什么呢?大概是因为有些不同位置的点可能会编出相同的编号。。。那整么办–先for一边打个时间戳tim,每次++即可。

#include<bits/stdc++.h>
using namespace std;
const int maxn=75000,INF=0x3f3f3f3f;
int dis[maxn],cur[maxn],head[maxn],edge=0,source,sink;
struct EDGE {int v,r,nxt;
}e[400000];
int n,m,h,D,tim=0,c[42][42][42],val[42][42][42];
inline int read() {int x=0;char c=getchar();while (c<'0'||c>'9') c=getchar();while (c>='0'&&c<='9') x=x*10+c-'0',c=getchar();return x;
}
inline void adde(int u,int v,int r) {e[edge].nxt=head[u],e[edge].v=v,e[edge].r=r,head[u]=edge++,e[edge].nxt=head[v],e[edge].v=u,e[edge].r=0,head[v]=edge++;
}
inline bool bfs() {queue<int> q;memset(dis,-1,sizeof(dis)),dis[source]=0;q.push(source);while (!q.empty()) {int p=q.front();q.pop();for (int i=head[p];~i;i=e[i].nxt) {int v=e[i].v;if (e[i].r>0&&dis[v]==-1)dis[v]=dis[p]+1,q.push(v);}}return ~dis[sink];
}
int dfs(int p,int low) {if (p==sink||low==0) return low;int cost=0,flow;for (int &i=cur[p];~i;i=e[i].nxt) {int v=e[i].v;if (e[i].r>0&&dis[v]==dis[p]+1&&(flow=dfs(v,min(low,e[i].r)))) {e[i].r-=flow,e[i^1].r+=flow,cost+=flow,low-=flow;if (low==0) return cost;}}if (low>0) dis[p]=-1;return cost;
}
int main() {
//  freopen("bzoj 3144.in","r",stdin);memset(head,-1,sizeof(head));n=read(),m=read(),h=read(),D=read(),source=0,sink=n*m*(h+1)+1;for (int i=1;i<=n;++i)for (int j=1;j<=m;++j)for (int k=1;k<=(h+1);++k)c[i][j][k]=++tim;   ++tim;//sinkfor (int k=1;k<=h;++k)for (int i=1;i<=n;++i)for (int j=1;j<=m;++j) {val[i][j][k]=read();adde(c[i][j][k],c[i][j][k+1],val[i][j][k]);}   for (int i=1;i<=n;++i)for (int j=1;j<=m;++j) {adde(source,c[i][j][1],INF),adde(c[i][j][h+1],sink,INF);for (int k=D+1;k<=h+1;++k) {if (i+1<=n) adde(c[i][j][k],c[i+1][j][k-D],INF);if (i-1>0) adde(c[i][j][k],c[i-1][j][k-D],INF);if (j+1<=m) adde(c[i][j][k],c[i][j+1][k-D],INF);if (j-1>0) adde(c[i][j][k],c[i][j-1][k-D],INF);}}int min_cut=0;while (bfs()) {int a;for (int i=source;i<=sink;++i) cur[i]=head[i];while (a=dfs(source,INF)) min_cut+=a;}printf("%d\n",min_cut);return 0;
}

bzoj 3144(最小割)相关推荐

  1. bzoj 1934 最小割

    收获: 1.流量为0的边可以不加入. 2.最小割方案要与决策方案对应. 1 #include <cstdio> 2 #include <cmath> 3 #include &l ...

  2. BZOJ 1266: [AHOI2006]上学路线route Floyd算法,网络最小割

    Description 可可和卡卡家住合肥市的东郊,每天上学他们都要转车多次才能到达市区西端的学校.直到有一天他们两人参加了学校的信息学奥林匹克竞赛小组才发现每天上学的乘车路线不一定是最优的. 可可: ...

  3. BZOJ.3144.[HNOI2013]切糕(最小割)

    题目链接 没有\(D\)的限制怎么做?"最小"我们可以想到最小割,把同一纵轴上的点串起来,分别连到S,T,最小割就是答案.(在这把点权放到前一条边上) 有限制,即如果要割点\(i\ ...

  4. S-T平面图中利用最短路求最小割(BZOJ 1001)

    BZOJ 1001: [BeiJing2006]狼抓兔子 最小割 题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1001 现在小朋友们最喜欢 ...

  5. BZOJ 2132 圈地计划(最小割)【BZOJ 修复工程】

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 题目链接 https://hydro.ac/d/bzoj/p/2132 是 hydro 的 BZOJ ...

  6. BZOJ 4823 Luogu P3756 [CQOI2017]老C的方块 (网络流、最小割)

    题目链接 (Luogu) https://www.luogu.org/problem/P3756 (BZOJ) http://lydsy.com/JudgeOnline/problem.php?id= ...

  7. BZOJ 3894 Luogu P4313 文理分科 (最小割)

    题目链接: (bzoj) https://www.lydsy.com/JudgeOnline/problem.php?id=3894 (luogu) https://www.luogu.org/pro ...

  8. BZOJ 3218 UOJ #77 A+B Problem (主席树、最小割)

    BZOJ 3218 UOJ #77 A+B Problem (主席树.最小割) 大名鼎鼎的A+B Problem, 主席树优化最小割-- 调题死活调不对,一怒之下改了一种写法交上去A了,但是改写法之后 ...

  9. BZOJ 2039 人员雇佣 (最小割)

    题面:BZOJ传送门 网络流的题真神仙= = 大致分为三种情况 选某个人$i$,收益减少$a_{i}$ 选了$i$选了$j$,收益增加$2e_{ij}$ 选了$i$不选$j$,收益减少$e_{ij}$ ...

最新文章

  1. 实现一个全链路监控平台很难吗?Pinpoint、skywalking、zipkin,哪个实现比较好?...
  2. 如何让敏捷中的每日站会发挥最大效果?
  3. 美团副总裁夏华夏:科技应该为每一个普通人服务,要做“接地气的AI” | MEET2021...
  4. [转]redis的三种启动方式
  5. PHP移动互联网开发笔记(3)——运算符
  6. ubuntu网站收集
  7. Android进程间通信(复习笔记)
  8. networkx 中心势计算_科学网—复杂网络分析库NetworkX学习笔记(2):统计指标计算 - 闫小勇的博文...
  9. solr的多条件组合查询和solr的范围查询【转】
  10. Python还能走多远?
  11. 考研(一):一段不错的经历之考研总结
  12. 张先生是什么意思_她为家付出几十年,只因拿六千礼金,遭儿媳怒怼:什么钱你都敢拿?...
  13. JXNU Linux 学习通单元测试题 和 答案
  14. st8s003 c语言编译器,STM8S系列单片机stm8s003f3p6性能介绍
  15. 日本外贸市场开发攻略
  16. [从源码学设计]蚂蚁金服SOFARegistry之服务上线
  17. Error installing to Instantiated: name=AttachmentStore state=Described
  18. Window系统多硬盘设置新引导盘
  19. mysql 月初 月末_月初 月末 sql 语句(日期所在月的第一天,最后一天)
  20. 网线直接接电脑可以上网,但是接到无线路由器上,就不能上网了

热门文章

  1. google 将推出最新版的地图
  2. qt开启线程界面假死问题解决
  3. iceberg的调研报告
  4. 消灭星星网页版java代码,js实现消灭星星(web简易版)
  5. 微信小程序无法获取用户头像和昵称,微信小程序获取昵称为微信用户,头像为灰色,请使用下面方式过去
  6. 几行代码轻松搞定网页的简繁转换
  7. C语言游戏3:飞机游戏
  8. iOS 使用 Alamofire 实时监测网络状况
  9. 防窜货下加密锁使用常见问题
  10. 【Linux】之 VT100 终端控制码