您的位置:首页 > 其它

bzoj 3451

2017-03-11 11:16 162 查看
题目:

求随机点分治的期望复杂度。

题解:

思路一开始就没对,应该往贡献的方向去思考的。

考虑一个点对(u,v),若u会对v产生影响,当且仅当u->v的路径上不存在被选中的点。而一条路径上所有的点被选中的概率是均等的,u被首选的概率为1/(dis(u,v)+1)。那么对v的期望贡献就是那么多。

那问题成功转化成

∑i,j<=n1/(dis(u,v)+1)

设D(i)表示为距离为i的点对个数。

那么以上式子可变为:

2∗∑i<=nD(i)/(i+1)

到了这步,D可以用点分治+FFT实现。

在点分治的过程中:

设g(i)为重心前面子树到重心中距离为i的点数,f(i)为当前子树到重心中距离为i的点数。

D(i)=∑j<=ng(j)∗f(i−j)

这里就用FFT加速。

在点分治的过程中,用最大树高为限制就可以保证复杂度,因为点分治的过程中,对应树高是不会超过对应子树大小的,这样就可以保证每层分治的清空总数量就是n的级别。所以,这题的复杂度为O(nlog2n)。

感觉自己的FFT还不慢,但是为什么自己的NTT那么慢呢……
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: