「考试」小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)$

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

时间: 2024-08-30 17:47:29

「考试」小P的生成树的相关文章

「Luogu4430」小猴打架

「Luogu4430」小猴打架 题目描述 一开始森林里面有N只互不相识的小猴子,它们经常打架,但打架的双方都必须不是好朋友.每次打完架后,打架的双方以及它们的好朋友就会互相认识,成为好朋友.经过N-1次打架之后,整个森林的小猴都会成为好朋友. 现在的问题是,总共有多少种不同的打架过程. 比如当N=3时,就有{1-2,1-3}{1-2,2-3}{1-3,1-2}{1-3,2-3}{2-3,1-2}{2-3,1-3}六种不同的打架过程. 输入输出格式 输入格式: 一个整数N. 输出格式: 一行,方案

LibreOJ #2006. 「SCOI2015」小凸玩矩阵

二次联通门 : LibreOJ #2006. 「SCOI2015」小凸玩矩阵 /* LibreOJ #2006. 「SCOI2015」小凸玩矩阵 本来以为是道数据结构题 后来想了想发现不可做 就考虑二分dp判断 推方程推不出来 就考虑用网络流判断了 二分出一个数 将小于这个数的位置的点编号 每行的可行点与下一行可行的点连边 后一边最大流判断可选出的数的个数是否符合要求即可 */ #include <cstdio> #include <iostream> #include <q

LibreOJ #2006. 「SCOI2015」小凸玩矩阵 二分答案+二分匹配

#2006. 「SCOI2015」小凸玩矩阵 内存限制:256 MiB时间限制:1000 ms标准输入输出 题目类型:传统评测方式:文本比较 上传者: 匿名 提交提交记录统计讨论测试数据 题目描述 小凸和小方是好朋友,小方给小凸一个 N×M N \times MN×M(N≤M N \leq MN≤M)的矩阵 A AA,要求小凸从其中选出 N NN 个数,其中任意两个数字不能在同一行或同一列,现小凸想知道选出来的 N NN 个数中第 K KK 大的数字的最小值是多少. 输入格式 第一行给出三个整数

LibreOJ #2009. 「SCOI2015」小凸玩密室

二次联通门 : LibreOJ #2009. 「SCOI2015」小凸玩密室 /* LibreOJ #2009. 「SCOI2015」小凸玩密室 树形dp 做到这么正常的题突然感觉好不适应.... 考虑转移 f[x][y] 表示从x点转移到y点的代价 则我们需要处理出以x为根的子树的代价 讨论处理一下即可(有没有左儿子,有没有右儿子,或是都有) 但是这样转移是O(N^2)的 所以我们考虑优化 显然有很多转移是不需要的 比如y在x的子树中时就没必要转移 那么考虑优化 设g[x][i]表示走完x的子

—Libre#2009. 「SCOI2015」小凸玩密室

#2009. 「SCOI2015」小凸玩密室 内存限制:256 MiB时间限制:1000 ms标准输入输出 题目类型:传统评测方式:文本比较 上传者: 匿名 提交提交记录统计讨论测试数据 题目描述 小凸和小方相约玩密室逃脱,这个密室是一棵有 n nn 个节点的完全二叉树,每个节点有一个灯泡.点亮所有灯泡即可逃出密室.每个灯泡有个权值 Ai A_iA?i??,每条边也有个权值 bi b_ib?i??. 点亮第 1 11 个灯泡不需要花费,之后每点亮一个新的灯泡 V VV 的花费,等于上一个被点亮的

「wxParser」小程序插件:想在小程序中快速部署富文本?这个插件让你一步搞定

上期,我们在<「微信同声传译」小程序插件:快速实现语音转文字.文本翻译.语音合成等能力>一文中介绍了「微信同声传译」小程序插件的意义.作用以及应用.而在此之前,我们还介绍过「腾讯地图」.「腾讯视频」.「医院 LBS 位置服务」插件,有兴趣了解的读者可以点击「微信极客WeGeek」公众号底部菜单「极客干货 - 小程序插件」了解. 今天我们为大家推荐的是一款富文本渲染插件「wxParser」,目前 wxParser 支持对一般的富文本内容包括标题.字体大小.对齐和列表等进行解析.同时也支持表格.代

「考试」老司机的狂欢

啊考场上没想到. 直接二分答案,然后$nlogn$求解最长上升序列来$check$是否大于$K$即可. 然后恶心的是要求输出方案,而且...字典序最小. 我们考虑二分出答案之后求出方案. $LIS$的过程其实类似于建树,我们要把当前的决策挂在当前树上某一深度的点中,字典序最小的方案下面. 那么当我们比较两个方案的时候,只需要求出他们在$LIS$树上的$LCA$,那么在$LCA$以上的部分完全相同,所以只需要比较他们在$LCA$一下的部分中最小值的大小,较小的更优,一边跑$LIS$一边跑倍增$LC

「SCOI2015」小凸玩密室

题目描述 小凸和小方相约玩密室逃脱,这个密室是一棵有 $n$ 个节点的完全二叉树,每个节点有一个灯泡.点亮所有灯泡即可逃出密室.每个灯泡有个权值 $A_i$,每条边也有个权值 $b_i$. 点亮第 $1$ 个灯泡不需要花费,之后每点亮一个新的灯泡 $V$ 的花费,等于上一个被点亮的灯泡 $U$ 到这个点 $V$ 的距离 $D(u, v)$,乘以这个点的权值 $A_v$. 在点灯的过程中,要保证任意时刻所有被点亮的灯泡必须连通,在点亮一个灯泡后必须先点亮其子树所有灯泡才能点亮其他灯泡.请告诉他们,

「考试」省选5

这套做的比较顺. 题也很好. T1 一个简单的贪心. 我们二分能够无伤通过的蛤个数. check就用之前用烂了的队列来check. 然后我们知道无伤通过最多一定对应这所有的石头被踩完,因为这样可以让每只蛤单次跳跃距离的最大值尽量的小. 这也就是说两种最优操作是合在一起的,有点像\(CSP-2019 D2T2\). 那么,二分出来剩下的就是必然要跳出大于\(D\)的了,我们取最小的几只,让他们一步从\(1\)跳过去. 另外一种情况是没有蛤可以无伤过. 这时候就让最便宜的那只去踩地雷,踩过所有的石头