#SLT08C. 2026年S组模拟赛10连测第8场-T3 程老师的课程链

2026年S组模拟赛10连测第8场-T3 程老师的课程链

项目 内容
输入文件名 scc.in
输出文件名 scc.out
可执行文件名 scc
每个测试点时限 1.0 秒
内存限制 512 MiB
测试点数目 20
是否等分 是

结果比较方式为全文比较(过滤行末空格及文末换行)。

题目描述

程老师要给一批学员开设 nn 门课程,课程按 1∼n1 \sim n 编号。排课时他发现,这些课程之间存在 mm 条先修关系:每条先修关系是一对课程 (a,b)(a, b),含义是"课程 aa 必须先修完,课程 bb 才能开始修"。同一门课不会要求自己先修——没有一条先修关系是自己指向自己的;而两门课之间可以同时存在两个方向的先修关系,也就是既要求 aa 先于 bb、又要求 bb 先于 aa。

把先修关系接起来推:如果已经推出"aa 先于 bb",又有一条先修关系说"bb 先于 cc",那就同样要求 aa 先于 cc;推出来的先后要求可以继续参与推导,中途经过哪些课程不限。如果按这套推法,既能推出"课程 uu 先于课程 vv"、又能推出"课程 vv 先于课程 uu",就称 uu 与 vv 互为先修。程老师的处理办法是:把两两互为先修的一批课程捆成一个班组,班组内的课程必须同时开修、同时修完——这批课互相要求对方在先,只有同时上才排得开。

排课按时段进行。每个时段开始时,程老师可以同时安排任意多个班组、任意多门不属于任何班组的课开课:一个班组或一门课能否排在某个时段,只看它所需的全部先修课程是否都已在更早的时段里修完;同一时段内排在一起的那些班组与课之间,没有先后要求,也不需要彼此之间有任何关系。班组一旦开出,其中所有课程都在同一个时段里修完、不跨时段;不属于任何班组的课不与其他课程捆绑,但同样可以与其他班组、其他课共用同一个时段。现在程老师想知道:把全部课程修完,最少需要几个时段。

输入格式

从文件 scc.in 中读入数据。

第一行两个整数 n,mn, m,表示课程门数与先修关系条数。

接下来 mm 行,每行两个整数 a,ba, b,表示一条"课程 aa 必须先于课程 bb"的先修关系。若 m=0m = 0,则没有这一部分。

输出格式

输出到文件 scc.out 中。

输出一行一个整数,表示修完全部课程最少需要的时段数。

样例

4 4
1 2
2 3
3 1
3 4
2

样例 1 解释

先沿着先修关系推一遍。课程 11 要求课程 22 先修完;反过来,把"22 先于 33"接上"33 先于 11",又推出"22 先于 11"。这一对课程两边都要求对方在先,互为先修。同样地,课程 22 与 33 也互为先修——33 顺着"33 先于 11""11 先于 22"推出先于 22;课程 11 与 33 也互为先修——11 顺着"11 先于 22""22 先于 33"推出先于 33,而"33 先于 11"本来就有。三门课两两互为先修,只能同时开修、同时修完,捆成一个班组,占一个时段。课程 44 要求课程 33 先修完,只能排在这个班组之后的下一个时段。

为什么不能更少:课程 44 不能与班组排在同一个时段(它要求班组里的课程先修完),而班组又不能拆到两个时段(捆在一起的课程必须同时修完),所以 11 个时段做不到;上面的排法恰好用 22 个时段。

3 2
1 2
2 3
3

样例 2 解释

三门课里没有任何一对互为先修:课程 11 与 22 之间只有"11 先于 22"这一个方向的要求;课程 22 与 33 之间只有"22 先于 33";课程 11 与 33 之间能推出"11 先于 33",却推不出"33 先于 11"。三门课都不属于任何班组,各自单独开课。

再看时段。课程 22 要求课程 11 先修完,课程 33 要求课程 22 先修完:它们的先修课程都没有提前修完,谁也不能和谁挤在同一个时段里,只能在时间上一门接一门,所以三个时段都要占用。

数据范围

对于所有测试数据,保证:

  • 1≤n≤1051 \le n \le 10^5,0≤m≤2×1050 \le m \le 2 \times 10^5;
  • 每条先修关系 1≤a,b≤n1 \le a, b \le n,且 a≠ba \ne b;
  • 没有一条先修关系是自己指向自己的;
  • 同两门课程之间可以同时存在两个方向的先修关系。

各测试点的约束如下:

测试点 nn mm 特殊性质
1∼21\sim2 ≤10\le 10 ≤20\le 20 无
3∼63\sim6 ≤500\le 500 ≤1000\le 1000
7∼107\sim10 ≤2000\le 2000 ≤5000\le 5000
11∼1411\sim14 ≤104\le 10^4 ≤3×104\le 3 \times 10^4
15∼1815\sim18 ≤105\le 10^5 ≤2×105\le 2 \times 10^5
1919 A
2020 B
  • 特殊性质 A:没有任何先修关系,即 m=0m = 0。
  • 特殊性质 B:把课程按 1,2,…,n1, 2, \dots, n 编号后,恰好有 n−1n - 1 条先修关系,且对每个 1≤i<n1 \le i < n,这 n−1n-1 条先修关系中恰好有一条是"课程 ii 必须先于课程 i+1i+1"。
难度 未评定
通过率 —
尝试 0
通过 0
ID
3799
类型
传统题
Time Limit
1000ms
Memory Limit
512MiB
上传者