跳到主要内容

P5470. 推理模型分批约束

场次:2026年9月18日-非AI方向 · 来源:CodeFun2000 P5470

题目描述​

一次偏复杂的推理会拉起若干模型,每一份都对应一个整型编号(若份数是 66,编号便是 1,2,3,4,5,61,2,3,4,5,6)。各模型可能有先后约束:前一份产出会作为后一份的入口,这些约束登记在表 relrel 中。

已知模型份数 pp 以及约束表 relrel。第 kk 条若写作 rel[k]=[u,v]rel[k]=[u,v],意思是编号 vv 必须等编号 uu 先结束,也就是 uu 要排到 vv 前面。

请把这次推理里的模型切成若干波次来跑;同一波次内彼此没有先后约束,因此允许同时开工。请给出最少要切几波,才能让全部模型都跑完。

下面这 55 份模型的先后约束可以当作例子:

    4
/ \
1 5
/ \
2 3

编号 11 与 55 都要等 44 结束,编号 22 与 33 都要等 55 结束。于是先跑 44,再让 11、55 同时跑,最后让 22、33 同时跑,合计 33 波。

注意:

1、各模型保证不会形成环形等待。

限制范围:

1≤p≤1051\le p\le 10^{5}

0≤e≤min⁡(p×(p−1),1.5×106)0\le e\le\min(p\times(p-1),1.5\times 10^{6})

输入格式​

pp:整数,模型份数。

ee:整数,先后约束一共有几条。

随后给出 ee 行,每一行两个模型编号,用来标明这一对谁先谁后。

输出格式​

一个整数,即最少要安排的波次数。

示例​

示例 1​

输入:

6 5
2 1
2 5
1 4
5 4
3 6

输出:

3

说明:

一共 66 份模型。先后约束是:11 等 22,55 等 22,44 等 11 也等 55,66 等 33。

可按 (2,3)→(1,5,6)→(4)(2,3)\to(1,5,6)\to(4) 安排:第一波同时跑 22 与 33,第二波同时跑 11、55、66,第三波跑 44。最少 33 波。

示例 2​

输入:

5 4
5 3
3 2
2 1
1 4

输出:

5

说明:

一共 55 份模型。先后约束是:33 等 55,22 等 33,11 等 22,44 等 11。只能沿 5→3→2→1→45\to 3\to 2\to 1\to 4 依次开跑,需要 55 波。

加载评论中...