1 条题解
-
0
题目分析
我们有:
- 个实验,每个实验 有收益
- 个仪器,每个仪器 有费用
- 实验 需要某些仪器
- 如果选择一个实验,则必须选择它需要的所有仪器
- 净收益 = 实验总收入 − 仪器总费用
目标:选择一部分实验(及所需仪器)使得净收益最大。
问题建模
这是一个依赖关系的选择问题:
- 实验有正权值(收益)
- 仪器有负权值(费用)
- 选择实验则必须选择它依赖的所有仪器
这正是最大权闭合子图的标准模型:
- 闭合子图:若选择一个点,则必须选择它的所有后继
- 权值:实验权值为 ,仪器权值为
- 依赖关系:实验 → 所需仪器
最大权闭合子图转最小割
构造网络流图:
- 源点 向每个实验 连边,容量
- 每个仪器 向汇点 连边,容量
- 每个实验 向它需要的所有仪器 连边,容量
最大净收益 = 正权值和 − 最小割容量
其中:
- 正权值和 =
- 最小割 = 放弃的实验收益 + 选择的仪器费用
输出方案
在残量网络上从 进行 BFS/DFS:
- 能到达的实验节点是被选择的实验
- 能到达的仪器节点是被选择的仪器
算法步骤
- 读入
- 读入每个实验的收益及所需仪器
- 读入每个仪器的费用
- 建图:
- 节点:(0), 实验 , 仪器 , ()
- → 实验 :容量
- 仪器 → :容量
- 实验 → 仪器 :容量 (若需要)
- 跑最大流(Dinic 或 Edmonds-Karp)
- 计算净收益 = 总实验收益 − 最大流
- 从 在残量网络上 BFS 找出选择的实验和仪器
- 输出方案
样例验证
输入:
2 3 10 1 2 25 2 3 5 6 7
建图:
- 实验1:收益10,需要仪器1,2
- 实验2:收益25,需要仪器2,3
- 仪器费用:5,6,7
网络流图:
- → 实验1:容量10
- → 实验2:容量25
- 仪器1 → :容量5
- 仪器2 → :容量6
- 仪器3 → :容量7
- 实验1 → 仪器1,2:容量∞
- 实验2 → 仪器2,3:容量∞
最大流 = 18(计算得到) 净收益 =
选择方案:
- 实验:1,2
- 仪器:1,2,3
输出:
1 2 1 2 3 17
复杂度分析
- 节点数:
- 边数:
- Dinic 算法复杂度:,在这里完全可行
- 1
信息
- ID
- 3146
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 10
- 标签
- 递交数
- 7
- 已通过
- 1
- 上传者