"""
https://www.lanqiao.cn/problems/1337/learning/?page=1&first_category_id=1&name=%E8%B5%B0%E5%A4%9A%E8%BF%9C
"""
# 拓扑排序
from collections import deque
def topo():
q = deque()
# 将所有入度为0的节点入队
for i in range(1, n + 1):
if ru[i] == 0:
q.append(i)
ans = 0
while len(q) != 0:
u = q.popleft()
for v in g[u]:
dp[v] = max(dp[v], dp[u] + 1)
ans = max(ans, dp[v])
ru[v] -= 1
# 拓扑排序保证在处理到某个节点时, 其所有的入点已经处理过了
if ru[v] == 0:
q.append(v)
print(ans)
n, m = map(int, input().split())
# 记录每个节点的入度
ru = [0] * (n + 1)
# dp[u]表示从入度为0的节点出发到达u的最大距离
dp = [0] * (n + 1)
g = [[] for i in range(n + 1)]
for i in range(m):
u, v = map(int, input().split())
g[u].append(v)
ru[v] += 1
topo()
蓝桥杯-走多远
最新推荐文章于 2024-07-18 19:36:20 发布