【bzoj3451】【Tyvj1953】Normal 题解
题目大意
n 个点的树,进行点分,每次随机选择分治中心,求期望复杂度。
例如长度为 3 的链,期望复杂度是 32(3+(2+1))+31(3+(1+1))=317
n≤30000
题解
有点妙。。。
考虑每个点的贡献,其实就是它在点分树上的期望深度。
也就是其他点成为它点分树祖先的概率和。
考虑两个点 i 和 j,j 成为 i 的祖先,当且仅当 i 到 j 的路径上,第一个被分治的是 j。
因此期望复杂度是:
i=1∑nj=1,j=i∑ndis(i,j)1
考虑用点分来求这个东西。
对于当前子树,可以求出 d[i] 表示到根距离为 i 的路径数量。然后 d 数组自己卷积一下就可以得到长度为 i 的路径数量。
因为 d 的元素大小随分治而减小,所以点分+FFT的总时间是 T(n)=O(n log n)+2T(2n)=O(nlog2n)