有向无环图的拓扑排序

Special Judge 提交数: 34, 通过率: 29.41%, 平均分: 33.24

题目描述:

由某个集合上的一个偏序得到该集合上的一个全序,这个操作被称为拓扑排序。

拓扑排序是对有向无环图( DAG)的顶点进行线性排序的一种算法,使得对于从顶点 u 到顶点 v 的每条有向边 uv,u 在排序中都出现在 v 之前。这种排序在计算机科学领域中非常重要,尤其是在任务调度、课程安排等场景中。

现读入一个有向图(若干条有向边),建立有向图并判断此图是否有回路,如果没有回路则输出任意一个拓扑序列。

输入格式:

输入的第一行包含两个正整数n和m,表示图中共有 n 个顶点,m 条有向边。其中 \( n \le 100000,m \le 200000 \) 。
以后的 m 行中每行有两个用空格隔开的整数 \( i \) 和  \( j \) ,表示第i个顶点有指向第j个顶点的有向边。

输出格式:

如果读入的有向图含有回路,请输出“ERROR”,不包括引号。
如果读入的有向图不含有回路,输出图的一个拓扑序列,每个整数后输出一个空格。

样例输入:

4 3
1 2
2 3
4 3

样例输出:

4 1 2 3 
时间限制: 1000ms
空间限制: 256MB