第二回 アルゴリズム実技検定 O - 可変全域木
問題
頂点辺の重みつき単純連結無向グラフが与えられる。 辺は頂点とを結び、重みはである。 辺からそれぞれについて、その辺を含む最小の重みの全域木を求める。
考察
与えられた連結グラフの最小の重みの全域木とその重みを求める。 この全域木に含まれる辺はこれで求められる。
それ以外の辺について考える。 作った全域木に辺を追加すると、全域木上の頂点とを結ぶパスと辺で閉路ができ、この閉路上の任意の辺を1つ除くと再び全域木ができることがわかる。 取り除く辺は辺以外の閉路上の辺のうち、もっとも重みが大きいものでよい(証明を後述)。
閉路上のもっとも重みの大きい辺を見つけるにはLowest Common Ancestorのアルゴリズムが使える。計算量はになる。
証明
[補題] 辺を含むグラフ上の最小全域木は、最小全域木に辺を追加し、での頂点とのパス上の辺のうちもっとも重みの大きい辺を除いたグラフと一致する
クラスカル法では、連結グラフの重みの小さい辺から順番に、現在作っている全域木に追加しても閉路を作らないもののみを追加することで最小全域木を構築する。
頂点とを結ぶ、に含まれない辺について考える。 で頂点とのパス上の辺はで、 を満たす。
頂点とを辺で結んだ状態からクラスカル法を用いて、この条件下での最小全域木を求める。 辺は、番号の順に追加されるが、を追加すると閉路ができるため、は追加されない。 また、頂点とのパス上以外の辺は、これに影響されないので、と同じ辺を使うことができる。
以上より、は、に辺を追加し辺を除いたものと一致する。よって題意は示された。