cogs2398 切糕 最小割
链接:http://cogs.pro/cogs/problem/problem.php?pid=2398
题意:找到一个最小割使损失最小。
字面意思,单纯的最小割。对于每一个点$(i,j,k)$,我们将其与它下方的点$(i,j,k-1)$,连一条容量为该点不和谐度的边,如果高度为1,连到源点,高度为n,建出一条到汇点容量无限大的边。对于高度超过限制高度的点,我们由周围下方可行点向它连容量无限大边。
1 #include<iostream> 2 #include<cstdio> 3 #include<algorithm> 4 #include<cstring> 5 using namespace std; 6 const int maxn=45,maxm=100005,inf=0x3f3f3f3f; 7 int map[maxn][maxn][maxn],ord[maxn][maxn][maxn],p,q,r,cnt,S,T,d,fx[4]={0,0,1,-1},fy[4]={1,-1,0,0}; 8 struct node 9 { 10 int from,to,flow,next; 11 }edge[maxm<<3]; 12 int head[maxm],tot; 13 void addedge(int u,int v,int w) 14 { 15 edge[tot]=(node){u,v,w,head[u]};head[u]=tot++; 16 edge[tot]=(node){v,u,0,head[v]};head[v]=tot++; 17 } 18 #include<queue> 19 int dis[maxm],g[maxm]; 20 bool bfs() 21 { 22 memset(dis,0,sizeof(dis)); 23 dis[S]=1; 24 queue<int>q;q.push(S); 25 while(!q.empty()) 26 { 27 int u=q.front();q.pop(); 28 for(int i=head[u];i!=-1;i=edge[i].next) 29 { 30 int v=edge[i].to; 31 if(edge[i].flow>0&&!dis[v]) 32 { 33 dis[v]=dis[u]+1; 34 q.push(v); 35 } 36 } 37 } 38 return dis[T]; 39 } 40 int dfs(int pos,int flow) 41 { 42 if(pos==T||!flow)return flow; 43 int f=0; 44 for(int &i=g[pos];i!=-1;i=edge[i].next) 45 { 46 int v=edge[i].to; 47 if(dis[v]==dis[pos]+1&&edge[i].flow>0) 48 { 49 int t=dfs(v,min(flow,edge[i].flow)); 50 if(t>0) 51 { 52 flow-=t;f+=t; 53 edge[i].flow-=t; 54 edge[i^1].flow+=t; 55 if(!flow)break; 56 } 57 } 58 } 59 return f; 60 } 61 int haha() 62 { 63 freopen("nutcake.in","r",stdin); 64 freopen("nutcake.out","w",stdout); 65 memset(head,-1,sizeof(head)); 66 scanf("%d%d%d",&p,&q,&r); 67 scanf("%d",&d); 68 for(int i=1;i<=p;i++) 69 for(int j=1;j<=q;j++) 70 for(int k=1;k<=r;k++)ord[i][j][k]=++cnt; 71 S=0,T=cnt+1; 72 for(int k=1;k<=r;k++) 73 for(int i=1;i<=p;i++) 74 for(int j=1;j<=q;j++) 75 { 76 int z;scanf("%d",&z); 77 if(k==1)addedge(S,ord[i][j][k],z),addedge(ord[i][j][r],T,inf); 78 else addedge(ord[i][j][k-1],ord[i][j][k],z); 79 if(k>d) 80 for(int l=0;l<4;l++) 81 { 82 int x=i+fx[l],y=j+fy[l]; 83 if(ord[x][y][k-d])addedge(ord[i][j][k],ord[x][y][k-d],inf); 84 } 85 } 86 int ans=0; 87 while(bfs()) 88 { 89 for(int i=S;i<=T;i++)g[i]=head[i]; 90 ans+=dfs(S,T); 91 } 92 printf("%d\n",ans); 93 } 94 int sb=haha(); 95 int main(){;}
cogs2398
转载于:https://www.cnblogs.com/Loser-of-Life/p/7262319.html
cogs2398 切糕 最小割相关推荐
- 【BZOJ3144】[Hnoi2013]切糕 最小割
[BZOJ3144][Hnoi2013]切糕 Description Input 第一行是三个正整数P,Q,R,表示切糕的长P. 宽Q.高R.第二行有一个非负整数D,表示光滑性要求.接下来是R个P行Q ...
- BZOJ.3144.[HNOI2013]切糕(最小割)
题目链接 没有\(D\)的限制怎么做?"最小"我们可以想到最小割,把同一纵轴上的点串起来,分别连到S,T,最小割就是答案.(在这把点权放到前一条边上) 有限制,即如果要割点\(i\ ...
- bzoj3144: [Hnoi2013]切糕(最小割)
传送门 据说这玩意儿叫切糕模型? 我们可以看做有$P*Q$个网格,每个格子有$R$个点,在每一个格子中选一个点,且相邻的点距离不能超过$d$,求最小代价 考虑如果没有限制条件怎么做.我们可以把每一个网 ...
- S-T平面图中利用最短路求最小割(BZOJ 1001)
BZOJ 1001: [BeiJing2006]狼抓兔子 最小割 题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1001 现在小朋友们最喜欢 ...
- [学习笔记]最小割之最小点权覆盖最大点权独立集
最小点权覆盖 给出一个二分图,每个点有一个非负点权 要求选出一些点构成一个覆盖,问点权最小是多少 建模: S到左部点,容量为点权 右部点到T,容量为点权 左部点到右部点的边,容量inf 求最小割即可. ...
- POJ 1966 Cable TV Network【无向图点连通度 最小割 E-K算法求最大流】
题目描述: 给你一个无向图,问你最少删掉几个点,使这个图成不连通. 解题报告: 概念 (1)一个具有 N 个顶点的图,在去掉任意 k-1 个顶点后 (1<=K<=N) 所得的子图仍连通, ...
- 最小割 ---- 2021 ccpc 威海 H city-safety(最大利润 = 最大收益 - 最小花费(最小割))
题目链接 题目大意: 一棵树,加强第 iii 个点有 wiw_iwi 的花费,而如果距离某 个点 ≤p≤ p≤p 的所有点都加强了,则会有 vpv_pvp 的收益,求最大净收益. 解题思路: 树形 ...
- 最小割 ---- 集合冲突模型 ----- P1646 [国家集训队]happiness
题面: 高一一班的座位表是个n*m的矩阵,经过一个学期的相处,每个同学和前后左右相邻的同学互相成为了好朋友.这学期要分文理科了,每个同学对于选择文科与理科有着自己的喜悦值,而一对好朋友如果能同时选文科 ...
- 最小割 ---- 二分图最大独立集(集合冲突模型) ---- 骑士共存 方格取数(网络流24题)
二分图独立集 定理: 二分图最大独立集=n - 二分图最大匹配 其实二分图独立集是特殊的一种最大权闭合子图.我们根据上文"收益"的思想,把选某个点的收益看为1,左部节点为正权点,右 ...
- 最小割 ---- 集合冲突模型 ---- AGC038 F - Two Permutations[详解]
题目链接 题目大意: 给出两个排列P,QP,QP,Q.要求构造两个排列A,B.A,B.A,B. 要求:AiAiAi要么等于iii,要么等于PiPiPi;BiBiBi要么等于iii,要么等于QiQiQi ...
最新文章
- 基于Debian9.3安装OpenVAS9.0(kali源)
- 如何生成存储器配置文件?
- IntelliJ IDEA 配置JDK出现The selected directory is not a valid home for JDK
- (解题报告)L1-032 Left-pad (20分)——15行代码AC
- spyder pyecharts不显示_我的显示器需要定时校色吗?
- VMware时钟不准的解决之道
- STL标准模板库操作 --- map
- ASP.NET调用WCF服务
- JAAS Authorization文档
- 锐起无盘服务器缓存,锐起无盘v0412(集成虚拟盘+SSD缓存+R2开包版)
- Python和R之间转换的基本指南:使用Python或R知识来有效学习另一种语言的简单方法。
- 求三点共圆求圆心半径及其推导(三角形外心)
- 文件怎么设置密码?一文带你看到文件加密的方法
- Python float()函数
- 我若为梦,愿为你织一帘幽然
- Mac 开发者常用的工具
- ESP8266 快速对接小爱同学 语音控制
- 荐书 | 睡不着?你需要这本神经漫游指南
- 中国自动驾驶专利申请排行榜
- 2022T电梯修理考试题及在线模拟考试
热门文章
- springboot+websocket聊天室(私聊+群聊)
- GPRS附着,PDP激活失败
- 服务器响应302是什么意思,HTTP 状态中的 301 和 302 是什么意思?二者有何不同?...
- TongWeb卡、TongWeb卡、TongWeb卡卡卡
- windows/linux远程开关机原理及实现
- 计算机windows用户名密码怎么查,如何查看Windows和Office的密码、序列号
- office2016激活后仍然出现输入激活码
- springboot后端接受图片到本地
- 对大数据、云计算的联系和区别理解学习
- 柴静《看见》发布会。。。