AGC018 - D Tree and Hamilton Path

AGC018-Dを解いた.

問題

N頂点重み付き木が与えられる. 1...Nの順列Pを選び、そのスコアを \sum_{i=1}^{N-1}{dist(P _ i,P _ {i+1})}と定める(dist(i,j):=頂点iと頂点jの距離). スコアの最大値を出力せよ.

解説

まずスコアにdist(P _ N , P _ 1)を加えたものを考える.
主客転倒を考えればこの最大値は各辺について次の値を計算して足し合わせた値である(この値をSとでも置いておく).
- 2*辺の重み*その辺を切った時の小さいほうの連結成分のサイズ
P _ i \rightarrow P _ {i+1}の移動で重心をまたぐようにPを決めていけば達成できる.
このことを踏まえて、P _ 1P _ Nをそれぞれu,vとして固定したときにスコアの最大値が何になるか考える.
(i) 重心が一つ
重心をcと置くと、スコアはS-dist(c,u)-dist(c,v)となる.
この最大値は簡単に求められる.
(ii) 重心が二つ 重心間の辺の重みをwと置くと、S-wが達成でき、これが最大値である.
(i)とほぼ同じこと.

考察

重心分解初めて使った. 上界達成可能なんじゃね? というのは大事だね.

提出コード

https://atcoder.jp/contests/agc018/submissions/51363220