题目:
给定一个n个点m条边的有向图,点的编号是1到n,图中可能存在重边和自环。
请输出任意一个该有向图的拓扑序列,如果拓扑序列不存在,则输出-1。
若一个由图中所有点构成的序列A满足:对于图中的每条边(x, y),x在A中都出现在y之前,则称A是该图的一个拓扑序列。
输入格式
第一行包含两个整数n和m
接下来m行,每行包含两个整数x和y,表示存在一条从点x到点y的有向边(x, y)。
输出格式
共一行,如果存在拓扑序列,则输出任意一个合法的拓扑序列即可。
否则输出-1。
数据范围
1≤n,m≤10^5
输入样例:
3 3
1 2
2 3
1 3
输出样例:
1 2 3
代码:
n, m = map(int, input().split())
idx, e, ne, h = 0, [0]*(2*m+1), [0]*(2*m+1), [-1]*(n+1)
in_de = [0]*(n+1) # 记录入度
def add(a, b):
global idx
e[idx] = b
h[a], ne[idx] = idx, h[a]
idx += 1
def topsort():
global n
queue = []
hh, tt = 0, 0
for i in range(1, n+1):
if in_de[i] == 0: queu