問題
頂点数 $N$、辺数 $M$ のグラフがあります。
頂点には $1$ から $N$ までの番号が付けられており、辺 $i$ は頂点 $A_i$ と $B_i$ を双方向に結ぶ長さ $C_i$ の辺です。
このグラフの最大全域木における辺の長さの総和を求めて下さい。
[制約]
🔹$ 2 \leqq N \leqq 100000 $
🔹$ 1 \leqq M \leqq 100000 $
🔹$ 1 \leqq C_i \leqq 10000 $
🔹このグラフは連結である。
解き方
全域木とは、$M$ 個の辺の中からいくつかを選んで作った全ての頂点が繋がっている木のことです。
全域木の中でも「長さの合計」が最大となるものを最大全域木といいます。
最大全域木は『長い辺から追加していく』という単純な貪欲法によって導き出すことができます。
ソースコード解説
前回記事では最小全域木の辺の長さの総和を求めましたが、今回の最大全域木の辺の長さの総和を求める場合は、辺の長さのソート順を逆にする変更だけで対応できます。
ソースコードの50行目だけ変更しており、辺の長い順にソートしています。
その他の処理は前回記事同様ですので、処理詳細はそちらをご参照下さい。
[Google Colaboratory]
1 | #-------- 入力例1 --------- |
[実行結果(入力例1)]
解: 321
最大全域木における辺の長さの総和を求めることができました。