Description
题目链接:Luogu 2763
假设一个试题库中有 $n$ 道试题,试题被分为 $k$ 个类型。每道试题都标明了所属类别,同一道题可能有多个类别属性。现要从题库中抽取 $m$ 道题组成试卷,每道题只能被选择一次。给出每个类型需要的题数,试设计一个满足要求的组卷方案。
数据范围:$2\le k\le 20$,$k\le n\le 1000$
Solution
由于这道题是关于匹配的问题,所以我们可以考虑用网络流解决。
首先建立源点 $s$ 和汇点 $t$。
- 源点和试题相连。因为一道题只能被选择一次,所以容量为 $1$。
- 汇点与类型相连。因为每个类型需要若干道题目,所以容量为“这个类型需要的题目数量”。
- 每道试题和它所属的类型相连。因为每道题只能满足一个类型,所以容量为 $1$。
接下来直接跑最大流就行了。
最后分析一下如何判断是否有解。如果最大流小于 $m$,那么显然无解,否则就是有解。输出方案时,我们对于每个类型 $i$,如果它向试题的连边(显然这条边应该是反向边)的残量不为 $0$,那么表示这条边的正向边是满流的,也就是选择了这个匹配,就可以输出方案了。
时间复杂度:$O(n^2m)$($\text{Dinic}$)
Code
1 |
|