bzoj 3451

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

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

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

那问题成功转化成
i,j<=n1/(dis(u,v)+1)
设D(i)表示为距离为i的点对个数。
那么以上式子可变为:
2i<=nD(i)/(i+1)

到了这步,D可以用点分治+FFT实现。
在点分治的过程中:
设g(i)为重心前面子树到重心中距离为i的点数,f(i)为当前子树到重心中距离为i的点数。
D(i)=j<=ng(j)f(ij)
这里就用FFT加速。

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

感觉自己的FFT还不慢,但是为什么自己的NTT那么慢呢……

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值