码迷,mamicode.com
首页 > 其他好文 > 详细

最小乘积生成树

时间:2021-05-25 18:40:07      阅读:0      评论:0      收藏:0      [点我收藏+]

标签:class   算法   inline   可见   最大   怎么   距离   mes   sum   

思想和分治凸包算法很像。
把生成树的\((\sum_x,\sum_y)\)投射到平面上,我们要找到\((x,y)\)使得\(x,y\)最小。
可以证明,最优的\((x,y)\)在凸包上。
证明可见2018国集论文。
考虑怎么求凸包,可以分治,保证当前处理的\((l,r)\)是凸包上的连续一段。
先求出凸包的最左/最右点,设为\(A,B\)这可以用两次mst,我们只需要对\(\sum_x,\sum_y\) mst即可。
考虑凸包上每个点向\(AB\)作垂线。
假设\(C\)\(AB\)的距离最大,则\(C\)一定在凸包上,可以递归\((A,C),(C,B)\)处理。
考虑如何求出\(C\),这相当于求出\(C\)使得三角形\(ABC\)的大小最大。
考虑叉积,我们要最小化\(AB\times AC\)
推出式子后发现这是\((x_B-x_A)y_C+(y_A-y_B)x_C-(x_B-x_A)y_A+(y_B-y_A)x_A\)
\(-(x_B-x_A)y_A+(y_B-y_A)x_A\)只要知道\(A,B\)后就能求出。
\((x_B-x_A)y_C+(y_A-y_B)x_C\),可以把每条边的权值设为\((x_B-x_A)b_i+(y_A-y_B)a_i\),求mst。
时间复杂度比较玄学

最小乘积生成树

标签:class   算法   inline   可见   最大   怎么   距离   mes   sum   

原文地址:https://www.cnblogs.com/ctmlpfs/p/14808809.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!