#P2708. Time to Graduate

    ID: 1708 传统题 1000ms 256MiB 尝试: 8 已通过: 1 难度: 10 上传者: 标签>动态规划图结构拓扑排序Mid-Central USA 2005

Time to Graduate

描述

一位计算机科学专业的学生正在研究从不同大学毕业所需的学期数。每所大学都提供了一份必修课程清单,包括这些课程的先修条件以及每门课程的开课学期。根据这些信息,确定毕业所需的最短学期数。

考虑以下示例:学生需要修读44门课程:mt42mt42cs123cs123cs456cs456cs789cs789mt42mt42仅在秋季学期开设且没有先修课程;cs123cs123仅在春季学期开设且没有先修课程;cs456cs456仅在春季学期开设,其先修课程为cs123cs123mt42mt42cs789cs789在秋季和春季学期都开设,唯一的先修课程是cs456cs456。最短毕业时间为55个学期:秋季修读mt42mt42,次年春季修读cs123cs123,第三年春季修读cs456cs456(因为它不在秋季开设),第四年秋季修读cs789cs789

本题中只有秋季和春季两个学期,学期计数从秋季开始。

此外还有一个额外限制:为了保持宿舍入住率,每所大学对每学期可修课程数量设置了上限。该限制作为输入数据的一部分给出。第三个示例展示了这种情况。

输入

包含112525个数据集,最后一行仅包含1 1-1\ -1。每个数据集的第一行是两个正整数nnmm1n121 \leq n \leq 12表示课程数量,2m62 \leq m \leq 6表示每学期最多修读课程数),接着一行列出nn个课程编号(由11-55位字母或数字组成)。随后nn行描述各课程信息,包括:课程编号、开课学期(FF=秋季,SS=春季,BB=两学期均开)、先修课程数量pp0p50 \leq p \leq 5)以及具体的pp个先修课程编号。第一个示例对应上述问题描述。

输出

对每个数据集输出一行结果,格式见示例。

输入数据 11

4 6
cs123 mt42 cs456 cs789
mt42 F 0
cs123 S 0
cs456 S 2 cs123 mt42
cs789 B 1 cs456
3 6
math1 comp2 comp3
comp3 S 1 comp2
math1 S 0
comp2 F 1 math1
4 3
m10 m20 c33 c44
m10 B 0
m20 B 0
c33 B 0
c44 B 0
-1 -1

输出数据 11

The minimum number of semesters required to graduate is 5.
The minimum number of semesters required to graduate is 4.
The minimum number of semesters required to graduate is 2.

来源

2005年美国中北部地区竞赛