がMSTの重みの総和より小さい場合は実現不可能である。
がMSTの重みの総和に等しい場合、MSTを作れるような塗り方を数えればよい……が、そもそも、だいたいの塗り方においてMSTが作れるように見える。というのも、MSTに使える辺が全部白または全部黒になっているような塗り方を除けばMSTができるからだ。つまり、MSTに使われうる辺が本あるとき、本全部を一色で塗る通りの塗り方以外はMSTを作れる。あとはが求まればよい。これは最小全域木を作った後、本の辺について最適性条件を満たせるか判定すれば数えられる。具体的には、の重みが(上の)パス上の重みの以下であればはMSTに使える[1]。変更がないので、クエリはダブリング等で処理できる。(制約をと勘違いしていた。愚直でよい。)
がMSTの重みの総和より大きい場合、MSTに使われうる辺は全部白または全部黒に塗られていなければならないので、とりあえず白に塗られているとする。この時、黒に塗られていてMSTに使えない辺が全域木に少なくとも1本含まれていなければならないが、その1本以外は白い辺も自由に選べる。したがって、MSTに対して辺を挿入してそれによってできたサイクルから別の最大辺を削除して全域木を作った時に、重みの総和がになるものを考えればよい。これにはやはり木上のクエリで答えられる。「MSTの辺と交換した時の重みの総和」がになる辺を本、より大きくなる辺を本としたとき、本から少なくとも一つを黒い辺にする必要があって、本は好きにぬってよいので、塗り方は通り。白の分と黒の分を足すと通りとなる。。
厳密な証明がよくわからなかった。
path optimality condition ↩︎