「考试」小P的生成树

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

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

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

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

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

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

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

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

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

$$len=cos(\varphi-\theta)\iota$$

其中:

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

$$\begin{array}{rcl}\\len &=& cos(\varphi-\theta)\iota\\ &=& (\cos{\varphi}\cos{\theta}+\sin{\varphi}\sin{\theta})\iota\\&=&(\frac{x}{\iota}\cos{\theta}+\frac{y}{\iota}\sin{\theta})\iota\\&=&\cos{\theta}x+\sin{\theta}y\end{array}$$

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

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

$$x_1\cos{\theta}+y_1\sin{\theta}=x_2\cos{\theta}+y_2\sin{\theta}$$

那么:

$$\tan{\theta}=\frac{y_2-y_1}{x_1-x_2}$$

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

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

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

posted @ 2019-10-19 07:56  Lrefrain  阅读(186)  评论(0编辑  收藏  举报