其他分享
首页 > 其他分享> > 最小乘积生成树

最小乘积生成树

作者:互联网

模板

一个无向图,每条边有边权\(a_i\)和\(b_i\),求一个生成树最小化

\[\sum a_i\cdot\sum b_i \]

思路:考虑将每种生成树对应成一个点\((\sum a_i,\sum b_i)\),那么答案一定在下凸壳上(显然),但是不能直接用求凸壳的方法,因为点数过多,考虑另一种递归求凸壳的方法:

显然问题在于找C,因为\(S_\triangle=\frac12 ah\),所以找h最大即找\(S_\triangle\)最大,即最大化

\[\vec{AC}\times\vec{AB} \]

\[(c_x-a_x,c_y-a_y)\times(b_x-a_x,b_y-a_y) \]

\[(c_x-a_x)(b_y-a_y)-(b_x-a_x)(c_y-a_y) \]

由于\(A\)和\(B\)是已知的,所以相当于最大化

\[(b_y-a_y)c_x-(b_x-a_x)c_y \]

令这个为边权跑最大生成树即可(注意要求方案)

扩展

最小乘积完美匹配(同理,把最小生成树改成KM或者费用流)

标签:AB,乘积,sum,最小,生成,vec,凸壳
来源: https://www.cnblogs.com/oisdoaiu/p/14958945.html