消費税はこちら
与えられたグラフ G (n 個の頂点と m 個の辺を持つ) の最小全域木 T と、G に追加する重み w の新しい辺 e = (u, v) が与えられたとします。グラフ G + e の最小全域木。完全なクレジットを受け取るには、アルゴリズムを O(n) 時間で実行する必要があります。
私はこの考えを持っています:
In the MST, just find out the path between u and v. Then find the edge (along the path) with maximum weight; if the maximum weight is bigger than w, then remove that edge from the MST and add the new edge to the MST.
トリッキーな部分は、O(n) 時間でこれを行う方法です。
問題は、MST の保存方法です。通常の Prim のアルゴリズムでは、MST は親配列として格納されます。つまり、各要素は対応する頂点の親です。
物品税が MST を示す親配列を私に与えると仮定すると、どうすれば上記のアルゴリズムを O(n) で解放できますか?
まず、親配列から u と v の間のパスを特定するにはどうすればよいですか? u と v の 2 つの祖先配列を使用して、共通の祖先をチェックすると、パスを取得できますが、逆になります。この部分で、共通の祖先を見つけるには、少なくとも O(n^2) で行う必要があると思いますよね?
次に、パスがあります。しかし、パスに沿った各エッジの重みを見つける必要があります。グラフは Prim のアルゴリズムに adjacency-list を使用すると思われるので、O(m) (m はエッジの数) を実行して、エッジの各重みを特定する必要があります。
...
したがって、O(n)でアルゴリズムを実行できるとは思いません。私が間違っている?