1 条题解
-
0
题目理解
Kiana 需要在寿司餐厅中,通过选择若干连续段寿司,最大化总美味度减去总花费的差值。
- 寿司有 种,按顺序排列,每种寿司有代号 和基础美味度 。
- 可以选择任意多个连续段,每个连续段 提供综合美味度 ()。
- 每种美味度(包括基础美味度和综合美味度)只会被计入一次。
- 花费与每种代号 的寿司被吃的数量 有关,为 ,其中 为给定常数。
问题转化为:选择若干连续段,使得这些连续段对应的美味度之和(不重复)减去因吃寿司产生的花费最大。
关键观察
1. 问题转化
选择连续段 相当于获得美味度 ,但同时必须选择该区间内的所有寿司。
选择寿司 会产生花费 (线性部分),并且如果这是第一个被吃的代号为 的寿司,还会产生固定花费 。因此,问题可以转化为最大权闭合子图模型:
- 正权点:每个连续段 ,权值为 (若 ,则权值为 ,因为选择单个寿司必须支付 的线性花费)。
- 负权点:每个寿司 (权值为 ,表示线性花费)和每个代号 (权值为 ,表示固定花费)。
- 依赖关系:选择连续段 必须选择区间内的所有寿司;选择寿司 必须选择其代号 对应的点。
2. 依赖关系的优化建图
直接建图时,每个连续段 需要向区间内每个寿司连边,边数可达 。
可以利用区间包含关系优化:对于 (),连向 和 ,容量为 。这样,选择 就必须选择其子区间,最终传递到每个寿司 ,将边数降至 。
算法设计
1. 构建网络流图
- 源点 ,汇点 。
- 区间点:对每个 ,建立点 。
- 若 ,权值为 。
- 若 ,权值为 。
- 若权值 ,从 向 连边,容量为权值;否则从 向 连边,容量为 权值。
- 若 且 ,从 向代号点 连边,容量为 。
- 若 ,从 向 和 连边,容量为 。
- 代号点:对每个出现的代号 ,建立点 ,从 向 连边,容量为 。
2. 求解最大权闭合子图
最大权闭合子图的权值等于正权点权值和减去最小割(即最大流)。
使用 Dinic 算法求解最大流。
算法正确性
1. 建模等价性
- 选择连续段 当且仅当对应区间点 被选中(在 侧)。
- 依赖边(容量 )保证:若 被选中,则其子区间点(最终到寿司点)也必须被选中。
- 寿司点 被选中表示吃了寿司 ,需支付线性花费 ,已通过权值 体现。
- 若 ,通过 到 的 边,保证只要吃了至少一个代号 的寿司,就必须选中 ,从而支付固定花费 。
- 最小割将图分为 侧(选中点)和 侧(未选中点),割边包括:
- 未选中的正权点(放弃的美味度)。
- 选中的负权点(支付的花费)。 因此,最小割即为放弃的美味度与支付的花费之和,正权点权和减最小割即为净收益最大值。
2. 优化建图的正确性
区间 依赖其所有子区间,而子区间最终依赖到每个寿司 (),因此依赖关系与直接连向所有寿司等价。
复杂度分析
时间复杂度
- 点数:,,,约 。
- 边数: 条依赖边, 条权值边, 条代号边,约 条。
- Dinic 算法:在一般图上复杂度为 ,但本题图为二分图结构且容量较小,实际运行很快。
空间复杂度
- 存储图需 ,在限制内。
算法标签
- 最大流
- 网络流
- 最小割
- 排列组合
- 线段树
- 最大权闭合子图
总结
本题通过转化为最大权闭合子图问题,并利用区间依赖关系优化建图,将看似复杂的区间选择与花费计算统一到网络流模型中求解,体现了图论建模的巧妙性。
- 1
信息
- ID
- 5978
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 10
- 标签
- 递交数
- 1
- 已通过
- 1
- 上传者