type
status
date
slug
summary
tags
category
icon
password
创建时间
Jan 10, 2025 02:10 AM
给你一个
n
个节点的 有向图 ,节点编号为 0
到 n - 1
,其中每个节点 至多 有一条出边。图用一个大小为
n
下标从 0 开始的数组 edges
表示,节点 i
到节点 edges[i]
之间有一条有向边。如果节点 i
没有出边,那么 edges[i] == -1
。请你返回图中的 最长 环,如果没有任何环,请返回
-1
。一个环指的是起点和终点是 同一个 节点的路径。
基环树
对基环树的理解出现了错误,认为题中中有且只有一个环。——❌
在基环树中有且只有一个环。但是按照题目中的构造,不一定只构造一个基环树,构造的是基环森林。需要考虑联通不连通。
考虑到了多个基环树的情况——超时了❌
上述,每一个循环都是从头开始遍历,没有考虑到已经访问的点。在环中,如果一个点访问了,环中的所有点都会被访问到,这里导致了访问的重复,增加了时间负载度。因此,我们利用
dist
数组访问过后,与初始值的不一致的特点,来判断有没有访问。但是下面在计算 ans = max(d - dist[x], ans);
这里存在问题。这里没有区别是第几次访问到环。第二次之后访问环的话,会导致结果偏大。——❌经过分析,问题出现在计算环长度那里,我们需要区分,第一次访问到这个环还是多次访问环。设置标志位,标识这次访问的开始。——✅
或者这样写——✅
📎 参考
- 无