从每个节点中找到最高可达节点
Posted
技术标签:
【中文标题】从每个节点中找到最高可达节点【英文标题】:Find the highest reachable node from each node 【发布时间】:2020-03-08 06:59:28 【问题描述】:我有一个有向图 G(V,E)。 G 可能包含循环。每个 v 都以值 n[v] 开头。让我们调用 Sv G 中 v 可达的所有顶点。对于每个 v,我需要用 max(n[u]) 更新 n[v],u∈Sv。
我尝试过使用带有路径压缩的 Quick-Union,但我不能,因为 G 是有向图。
一个选项是在每个节点上使用 DFS,但在最坏的情况下复杂度将是 O(V(V+E))。
有没有更好的方法来处理它(可能使用拓扑排序、传递约简或强连接组件)?
【问题讨论】:
您需要单独进行一轮更新,还是更新所有内容直到值静止? 静止。每个 n[v] 都需要有尽可能高的值 【参考方案1】:是的,有更好的方法 O(V+E):
-
查找所有强连接组件(Kadane 或 Tarjan 算法)并为组件中的每个顶点保存
max_n[v]
使用强连接组件构建新图
新图是一个 DAG
使用 DP 计算每个组件所需的值(对于 DAG,它可以使用 DFS 自上而下或使用 Kahn 自下而上)
【讨论】:
以上是关于从每个节点中找到最高可达节点的主要内容,如果未能解决你的问题,请参考以下文章