这是我正在努力解决的练习考试中的一个问题:
令 G = (V, E) 是一个加权无向连通图,具有正权重(您可以假设权重是不同的)。给定一个实数 r,定义子图 Gr = (V, {e in E | w(e) <= r})。例如,G0 没有边(显然是断开的),Ginfinity = G(假设是连通的)。问题是找到最小的 r 使得 Gr 是连通的。
描述通过重复应用 BFS 或 DFS 来解决问题的 O(mlogn) 时间算法。
真正的问题是在 O(mlogn) 中完成。这是我所拥有的:
r = min( w(e) ) => O(m)
while true do => O(m)
Gr = G with edges e | w(e) > r removed => O(m)
if | BFS( Gr ).V | < |V| => O(m + n)
r++ (or r = next smallest w(e))
else
return r
这是一个惊人的 O(m^2 + mn)。将其降低到 O(mlogn) 的任何想法?谢谢!