1 条题解
-
0
问题分析
我们有:
- 种试题类型(类别)
- 道试题,每道题可能属于多个类别
- 需要抽取 道题组成试卷,其中类型 需要 道题()
- 每道题只能被选用一次
目标:找出一个满足类型要求的选题方案,或判断无解。
建模思路
这是一个二分图多重匹配问题:
- 左部: 道试题(编号 )
- 右部: 种类型(编号 )
匹配规则:
- 每道题只能匹配到一个类型(因为一道题在试卷中只能出现一次)
- 每个类型 需要匹配恰好 道题
- 只有试题 属于类型 时,才能进行匹配
网络流建图
建立网络流模型:
-
源点 向每道试题 连一条容量为 的边
→ 保证每道题最多被选用一次 -
试题 向它所属的所有类型 连一条容量为 的边
→ 保证试题只能分配到其实际所属的类型 -
每个类型 向汇点 连一条容量为 的边
→ 保证类型 恰好选出 道题
可行性判定
计算从 到 的最大流:
- 如果最大流值等于 (总需求题数),则问题有解
- 否则无解,输出
No Solution!
方案输出
从网络流的流量分配中还原方案:
对于每个类型 ,检查所有从试题 到类型 的边:
- 如果这条边上的流量为 (即满流),说明试题 被分配到了类型
- 收集所有这样的试题 ,就是该类型选中的题目
样例分析
输入:
3 15 3 3 4 2 1 2 1 3 1 3 1 3 1 3 3 1 2 3 2 2 3 2 1 3 1 2 1 2 2 1 2 2 1 3 2 1 2 1 1 3 1 2 3- 种类型, 道题
- 类型需求:类型1要3题,类型2要3题,类型3要4题,总计 题
- 如第1题属于类型1和2,第2题只属于类型3
建图后求得最大流为10,等于总需求,有解。
输出方案:
1: 1 6 8 2: 7 9 10 3: 2 3 4 5验证:
- 类型1:3道题(1,6,8)
- 类型2:3道题(7,9,10)
- 类型3:4道题(2,3,4,5)
- 所有题目不重复,且都实际属于对应类型
算法复杂度
- 节点数:
- 边数:
- 使用 Dinic 算法:
- 在 时完全可行
总结
这道题通过将试题和类型建模为二分图的两部,用容量为1的边保证每道题只用一次,用类型到汇点的容量限制保证各类型的题目数量,将组卷问题转化为网络流最大流问题,能够高效地求解或判断无解。
- 1
信息
- ID
- 3936
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 10
- 标签
- 递交数
- 1
- 已通过
- 1
- 上传者