标签: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