带加权顶点的 DAG 算法

Algorithm for DAG with weighted vertices

设 G = (V,E) 为 DAG(有向无环图)。每个顶点 v 都有一个分配给它的权重 w(v)。给定一个顶点 u,让 f(u) = max{w(v) where v can reach u}。所以,换句话说,f(u)是所有能到达u的顶点的权值中最大的权值。目标是编写一个 线性时间 算法,为 G 中的每个顶点 u 计算 f(u)。

例如,假设这是输入图:

那么算法应该计算以下内容:

在O(n(n+m))时间内完成这个很简单,但是如何在O(n+m)时间内完成呢?

进行拓扑排序,然后按此顺序遍历节点,并为每个节点分配其自身权重的最大值和直接前置节点的 f(即具有通向该节点的边的节点)当前节点)。