2902: 课程安排(拓扑序)
内存限制:128 MB
时间限制:1.000 S
评测方式:文本比较
命题人:
提交:32
解决:28
题目描述
某大学开设了n门课程(编号为0到n-1),学生需要按照先修关系修读这些课程。
例如,若课程u是课程v的先修课,则必须先修完u才能修v。给定所有课程的先修关系,请判断是否存在一种合理的选课顺序(即拓扑序);
若存在,输出任意一个合法的顺序;若不存在(存在循环依赖,如A→B→C→A),则输出-1。
例如,若课程u是课程v的先修课,则必须先修完u才能修v。给定所有课程的先修关系,请判断是否存在一种合理的选课顺序(即拓扑序);
若存在,输出任意一个合法的顺序;若不存在(存在循环依赖,如A→B→C→A),则输出-1。
输入
- 第一行输入两个整数 n 和 m(1 ≤ n ≤ 1000,0 ≤ m ≤ 10000),分别表示课程总数和先修关系的数量。
- 接下来 m 行,每行输入两个整数 u 和 v(0 ≤ u, v < n),表示课程 u 是课程 v 的直接先修课(即有一条有向边 u → v)。
输出
- 如果存在合法选课顺序,输出一行,包含 n 个整数,表示任意一个拓扑序(整数间用空格分隔)。
- 如果不存在合法顺序(图中存在环),输出一行 -1"。
样例输入 复制
4 3
0 1
0 2
1 3
样例输出 复制
0 1 2 3