link
\(ans=maxa + maxb\)。瓶颈在如何寻找路径。
若只有一个因素?跑 mst即可。所以枚举 a(或排序), 我们可以得到一个 n^2log 的做法,这个暴力建树都要 nlog...
如何减少加边次数?自然想到用上一次加边后的版本。
所有边先按照 \(a\) 排序,每次在新的树上连边(边权为 \(b\))。若两个点之间没有路径,直接连接。否则,删去两个点路径中最大的边,在将它们连接。
很容易想到用 lct 维护,但是lct 不支持有边权,所以就把边也搞成点即可。
关于要删去最大边的证明:假设是先加上这条边再在环上删去,如果删去的最大边,任意两个点都可以以 \(\leqslant\) \(val_{max}\) 的价值到达,所以即证。
// viva la vida
#include
#include
#include
#include
#include