1013: 拓扑排序判断是否有环

内存限制:65535 MB 时间限制:1000 S
评测方式:文本比较 命题人:外部导入
提交:18 解决:9

题目描述


输入

第一行:两个整数n,m,表示顶点的个数,有向图的边数。 接下来m行,每行用两个整数a和b表示一条边,两个整数表示为从a到b的边。

输出

一个字符串(YES 或者 NO),表示是否存在环。

样例输入 复制

YES

样例输出 复制

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

提示

在有向图中,用顶点表示活动,用有向边表示活动u必须先于活动v进行。这种有向图叫做活动网络(Activity on Vertices),记做AOV网络 前驱与后继:在AOV网络中,如果存在有向边,则称活动u必须在活动v之前进行,并称u是v的直接前驱,v是u的直接后继。如果存在有向路径,则称u是v的前驱,v是u的后继。 有向环与有向无环图:从前驱与后继的传递性和反自反性可以看出,AOV网络中不能出现有向回路(或称为有向环)。不含有向回路的有向图称为有向无环图(DAG, Directed Acyclic Graph)。 判断有向无环图的方法是对AOV网络构造它的拓扑有序序列。即将各个顶点排列成一个线性有序的序列,使得AOV网络中所有存在的前驱和后继关系都能得到满足。 这种构造AOV网络全部顶点的拓扑有序序列的运算称为拓扑排序(Topological Sorting)。