#AEAI06004. 受优先级约束的准备任务排序
受优先级约束的准备任务排序
题目描述
执行抓取前,具身智能部会先安排一批准备任务,例如标定相机、清空路径、切换工具和确认安全区。有些任务必须在另一些任务之前完成;在所有当前可执行任务中,调度器希望优先做优先级更高的任务。
给定 n 个任务的优先级和 m 条依赖边 u v,表示任务 u 必须早于任务 v。请进行拓扑排序:每一步从入度为 0 的任务中选择优先级最大的任务;若优先级相同,选择编号较小的任务。
如果所有任务都能被取出,得到唯一的调度序列;如果存在依赖环,则无法生成完整序列。
输入格式
第一行输入 n m。第二行输入 n 个整数,第 i 个数为任务 i 的优先级。
接下来 m 行,每行输入 u v,表示 u 是 v 的前置任务。任务编号均为 1..n。
输出格式
若存在依赖环,输出:
DEPENDENCY_CYCLE
否则输出:
ORDER a1 a2 ... an
表示按规则得到的准备任务执行顺序。
数据范围与测试提示
- 正式测试会覆盖样例没有出现的边界输入,请不要依赖样例规模或样例顺序写特判。
- 输出只包含题目要求的字段,不要输出调试信息;浮点结果按题面要求保留 6 位小数。
- 优先级图可能存在多个入度为 0 的任务或出现环,排序和无解分支都要覆盖。
- 并列时按题面给定的优先级、编号或代价规则选取,不能依赖容器遍历顺序。
- 同优先级时编号小者先出队;自环也算依赖环并输出
DEPENDENCY_CYCLE。
样例
输入样例 1
4 3
5 10 5 1
1 3
2 3
3 4
输出样例 1
ORDER 2 1 3 4
输入样例 2
3 3
1 2 3
1 2
2 3
3 1
输出样例 2
DEPENDENCY_CYCLE