3246. 引水入城
题目链接
3246. 引水入城
MF 城建立在一片高原上。
由于城市唯一的水源是位于河谷地带的湖中,人们在坡地上修筑了一片网格状的抽水水管,以将湖水抽入城市。
如下图所示:
这片管网由 行 列节点(红色,图中 ,),横向管道(紫色)和纵向管道(橙色)构成。
行和列分别用 到 的整数和 到 的整数表示。
第 行的任何一个节点均可以抽取湖水,湖水到达第 行的任何一个节点即算作引入了城市。
除第一行和最后一行外,横向相邻或纵向相邻的两个节点之间一定有一段管道,每一段管道都有各自的最大的抽水速率,并需要根据情况选择抽水还是放水。
对于纵向的管道(橙色),允许从上方向下方抽水或从下方向上方放水;如果从图中的上方向下方抽水,那么单位时间内能通过的水量不能超过管道的最大速率;如果从下方向上方放水,因为下方海拔较高,因此可以允许有任意大的水量。
对于横向的管道(紫色),允许从左向右或从右向左抽水,不允许放水,两种情况下单位时间流过的水量都不能超过管道的最大速率。
现在 MF 城市的水务负责人想知道,在已知每个管道单位时间容量的情况下,MF 城每单位时间最多可以引入多少的湖水。
输入格式
由于输入规模较大,我们采用伪随机生成的方式生成数据。
每组数据仅一行包含 个非负整数 。其中, 和 如前文所述,表示管网的大小,保证 ;保证 。
是数据生成的参数,我们用如下的方式定义一个数列 :
我们将数列的第 项到第 项作为纵向管道的单位时间容量,其中 表示第 行第 列的节点到第 行第 列管道单位时间的容量;将数列的第 项到第 项(即接下来的 项)作为横向管道的单位时间容量,其中 表示第 行第 列的节点到第 行第 列管道单位时间的容量。
输出格式
输出一行一个整数,表示 MF 城每单位时间可以引入的水量。
注意计算过程中有些参数可能超过 位整型表示的最大值,请注意使用 位整型存储相应数据。
数据范围
共有 组评测数据,每组数据的参数规模如下所示:
输入样例1:
输出样例1:
样例1解释
使用参数得到数列 ,按照输入格式可以得到每个管道的最大抽水量如下图所示:
在标准答案中,单位时间可以引水 单位。所有纵向管道均向下抽水即可,不需要横向管道抽水,也不需要向上放水。
输入样例2:
输出样例2:
输入样例3:
输出样例3:
输入样例4:
输出样例4:
解题思路
分层图,最小割转平面图最短路
显然,如果不考虑数据范围,本题为最大流板题,即建立源点 和 汇点 , 向所有的第一行的点连边,容量足够大,最后一行的点向 连边,容量足够大,其余边权在流网络中即为容量,求解 到 的最大流即为所求,但显然本题数据范围不允许,由最大流最小割定理,,而该图又为一个平面图,可知 ,具体见 P4001 [ICPC-Beijing 2006] 狼抓兔子,则现在只用求解最短路即可,但 的算法也无法通过本题,考虑性质,由于向上的边的容量足够大,最短路必不会选择该边,即列与列之间的传递是单向的,很容易发现这是一个每一列每一列的分层图,而且在每一层中的某个点,其是一条链,即只能从上或者下转移过来,而列与列之间只有一个方向
另外还需要注意对偶图平面的编号,这里不再赘述
- 时间复杂度:
代码
__EOF__

本文链接:https://www.cnblogs.com/zyyun/p/16953668.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!