Pairwise on Graph/Tree
給定大小為
N
的帶權 Tree,定義 [{ f(u, v) }] 為 u 到 v 的最短路徑上,經過的邊權中的最大值。求 [{ sum_(u=1)^(N-1) sum_(v=u+1)^N f(u, v) }]。ABC214D
將邊按邊權由小到大加進 DSU,當 (u, v, w)
被加進去時,對答案的貢獻是「u
所在 connected component 的大小」乘上「v
所在 connected component 的大小」乘上 w
。
edges.sort_by_key(|&(u, v, w)| w);
let mut dsu = DSU::new(n);
let mut ans = 0 as i64;
for (u, v, w) in edges {
ans += dsu.size(u) as i64 * dsu.size(v) as i64 * w;
dsu.unite(u, v);
}