令G =(V,E)为DAG(有向无环图)。每个顶点v具有分配给它的权重w(v)。给定顶点u,设f(u)= max {w(v)其中v可以达到u}。因此,换句话说,f(u)是可以到达u的所有顶点的权重中的最大权重。目标是编写一个线性时间算法,该算法计算G中每个顶点u的f(u)。
例如,让它成为输入图:
graph http://oi60.tinypic.com/2mdp0yx.jpg
然后算法应计算以下内容:
在O(n(n + m))时间内完成此操作很简单,但如何在O(n + m)时间内完成?
答案 0 :(得分:2)
进行拓扑排序,然后按此顺序浏览节点,并为每个节点分配自身权重的最大值和前一个前任的f
(即具有通向当前节点的边缘的节点) )。