「考试」小P的生成树

考场上想到一半正解,没想到随机化,不然也许能够$A$掉。

题目所说的其实就是向量加法,求模长最长的向量生成树。

我们考虑对于两个向量,必然在平行边形对角线方向上,他们的投影和是最大的,长度就是对角线长度。

如果精度开到$1e-3$我们完全可以枚举最终的和向量的角度,因为只有在对角线,也就是正确的方向上,向量的模长才是最大的,所以也就是说即使枚举的角度不可构成,它得出的解也必然不是最优解。

但是精度开的很高,枚举复杂度过高了。(随机化角度就能A)

接着考虑对于某条向量有两种表达形式:

1.$(alpha,eta)$也就是坐标表示。

2.$(varphi,iota)$其中$iota=sqrt{alpha^2+eta^2}$,也就是极角模长表示。

向量在某个单位向量$( heta)$上的投影$len$就是:

$$len=cos(varphi- heta)iota$$

其中:

$$cos{varphi}=frac{x}{iota},sin{varphi}=frac{y}{iota}$$

$$egin{array}{rcl}\len &=& cos(varphi- heta)iota\ &=& (cos{varphi}cos{ heta}+sin{varphi}sin{ heta})iota\&=&(frac{x}{iota}cos{ heta}+frac{y}{iota}sin{ heta})iota\&=&cos{ heta}x+sin{ heta}yend{array}$$

然后可以求出两个向量投影相等时候的角度。

求出这个角度,发现它满足的条件是:

$$x_1cos{ heta}+y_1sin{ heta}=x_2cos{ heta}+y_2sin{ heta}$$

那么:

$$ an{ heta}=frac{y_2-y_1}{x_1-x_2}$$

$$ heta=arctan{frac{y_2-y_1}{x_1-x_2}}+(pi)$$

然后我们知道克鲁斯卡尔的过程,只跟边的相对大小有关系,那么其实只需要枚举$m^2$个角度即可,在这些角度中间不会发生生成树边决策改变,那么这些角度就足够了。

最终复杂度$O(m^2logm)$

原文地址:https://www.cnblogs.com/Lrefrain/p/11702731.html