CPSCO Session2-G:MSTX
クラスカル法あたりの考え方をちゃんとわかっているかを問われている気がしてよかった。
問題
考察・解法
最小全域木だしクラスカル法っぽく考えたい。まずのとき、つまりの辺から優先的に使うことを考えてみる。このとき、もしの辺を使うことがあるとしたら、そのような辺はがどのような値でも最小全域木に必ず用いられる辺であることが言える。このような辺の集合をとする。に属する辺はあらかじめ繋いでおいたグラフから初めて、その他の辺の使い方がの値によってどう変わるかを観察しよう。
のとき、重みが以下であるの辺を最小全域木に用いるかをクラスカル法で判定する。そして、そのような辺がなくなった後のグラフの連結成分の数をとすると、のときに最小全域木に使われるの辺の本数は本であることがわかる。なぜなら、ここからクラスカル法によっての辺をチェックした後に繋がれる可能性のある辺はに属する辺だけで、これらはあらかじめ繋いでおくことにしたからである。
を昇順にsortしておけば、これを素直にシミュレーションすることができ、時間計算量ですべてのクエリに解答できる。
実装
Submission #6249727 - CPSCO2019 Session2
クラスカル法を2回回すのがやや面倒?