Codeforces Round #529 (Div. 3)F. Make It Connected

問題概要

 n 頂点のグラフ G が与えられる. i 番目の頂点には数字 a_i が割り当てられており, 最初は辺が張られていない.  このとき, G に対して辺を張ることによって, 全域木を作成したい. このとき, 頂点 i と 頂点 j を結ぶのにはコスト a_i + a_j がかかる.

ただし, m 個の辺があたえられ,  i 番目の辺は x_iy_i を指定する. この辺については, a_i + a_j の代わりにコスト w_i で結ぶこともできる( a_i + a_j で結んでもよい). 

全域木を作るのに必要な最小コストはいくらか?

問題へのリンク

制約

  • 1 \le n \le 2\times 10^5, 0 \le m \le 2\times 10^5
  • 1 \le a_i \le 10^{12}
  •  1 \le x_i, y_i \le n, 1 \le w_i \le 10^{12}

解法

辺を張れる候補は n(n-1)/2  だけあるため, そのまま MST をすると当然 TLE します. どのようにすればよいでしょうか?

よくある発想として, 必要な辺だけ候補に入れることで辺の本数を減らすことを考えます. たとえば, m = 0 だとすれば, a_i が最小の頂点を v として, v を中心としたウニグラフを構築するのが明らかに最小になります. 

よって, m この辺が追加されたとしても, MST を構築しうる辺は m 個の辺たちと v とつながっている辺のみです(これ以外の辺を用いることによってコストが下がることはありません). よって, これらの辺をまとめてソートしクラスカル法などで MST を構築すればいいです. このとき辺の本数は O(n+m) 程度なので, 問題なく間に合います.

 実装

Submission #146588618 - Codeforces