JZOJ 4888. 【NOIP2016提高A组集训第14场11.12】最近公共祖先
注意到每一层的结点作为 lca 的贡献是相同的。
设当前的结点的深度为 d d d, 深度为 d d d 的子树大小为 s z d sz_d szd。
那么这个结点的贡献是 s z d + 1 2 k ( k − 1 ) + 2 s z d − 1 sz_{d+1}^2k(k-1)+2sz_d-1 szd+12k(k−1)+2szd−1。
比较显然的 s z d = ∑ i = d n − 1 k i − d sz_d=\sum_{i=d}^{n-1}{k^{i-d}} szd=∑i=dn−1ki−d,通过等比数列求和得 s z d = k n − d − 1 k − 1 sz_d=\frac{k^{n-d}-1}{k-1} szd=k−1kn−d−1。
当然答案是 ∑ d = 0 n − 1 [ s z d + 1 2 k ( k − 1 ) + 2 s z d − 1 ] × d × k d \sum_{d=0}^{n-1}{[sz_{d+1}^2k(k-1)+2sz_d-1]\times d\times k^d} ∑d=0n−1[szd+12k(k−1)+2szd−1]×d×kd。
化简一下
∑
d
=
0
n
−
1
[
s
z
d
+
1
2
k
(
k
−
1
)
+
2
s
z
d
−
1
]
×
d
×
k
d
=
∑
d
=
0
n
−
1
[
(
k
n
−
d
−
1
−
1
k
−
1
)
2
k
(
k
−
1
)
+
2
k
n
−
d
−
1
k
−
1
−
1
]
×
d
×
k
d
=
1
k
−
1
∑
d
=
0
n
−
1
[
(
k
n
−
d
−
1
−
1
)
2
k
+
2
(
k
n
−
d
−
1
)
−
(
k
−
1
)
]
×
d
×
k
d
=
1
k
−
1
∑
d
=
0
n
−
1
[
(
k
2
n
−
2
d
−
2
−
2
k
n
−
d
−
1
+
1
)
k
+
2
k
n
−
d
−
2
−
k
+
1
]
×
d
×
k
d
=
1
k
−
1
∑
d
=
0
n
−
1
(
k
2
n
−
2
d
−
1
−
2
k
n
−
d
+
k
+
2
k
n
−
d
−
2
−
k
+
1
)
×
d
×
k
d
=
1
k
−
1
∑
d
=
0
n
−
1
(
k
2
n
−
d
−
1
−
k
d
)
×
d
\begin{aligned} &\sum_{d=0}^{n-1}{[sz_{d+1}^2k(k-1)+2sz_d-1]\times d\times k^d}\\ =&\sum_{d=0}^{n-1}{[(\frac{k^{n-d-1}-1}{k-1})^2k(k-1)+2\frac{k^{n-d}-1}{k-1}-1]\times d\times k^d}\\ =&\frac{1}{k-1}{\sum_{d=0}^{n-1}{[(k^{n-d-1}-1)^2k+2(k^{n-d}-1)-(k-1)]\times d\times k^d}}\\ =&\frac{1}{k-1}{\sum_{d=0}^{n-1}{[(k^{2n-2d-2}-2k^{n-d-1}+1)k+2k^{n-d}-2-k+1]\times d\times k^d}}\\ =&\frac{1}{k-1}{\sum_{d=0}^{n-1}{(k^{2n-2d-1}-2k^{n-d}+k+2k^{n-d}-2-k+1)\times d\times k^d}}\\ =&\frac{1}{k-1}{\sum_{d=0}^{n-1}{(k^{2n-d-1}-k^d)\times d}} \end{aligned}
=====d=0∑n−1[szd+12k(k−1)+2szd−1]×d×kdd=0∑n−1[(k−1kn−d−1−1)2k(k−1)+2k−1kn−d−1−1]×d×kdk−11d=0∑n−1[(kn−d−1−1)2k+2(kn−d−1)−(k−1)]×d×kdk−11d=0∑n−1[(k2n−2d−2−2kn−d−1+1)k+2kn−d−2−k+1]×d×kdk−11d=0∑n−1(k2n−2d−1−2kn−d+k+2kn−d−2−k+1)×d×kdk−11d=0∑n−1(k2n−d−1−kd)×d
目标,计算
∑
d
=
0
n
−
1
k
d
×
d
\sum_{d=0}^{n-1}{k^d\times d}
∑d=0n−1kd×d。
看似不可求解。实则可以转化。
∑
d
=
0
n
−
1
k
d
×
d
=
∑
d
=
0
n
−
1
∑
d
′
=
0
d
k
d
′
=
∑
d
=
0
n
−
1
k
d
+
1
−
1
k
−
1
=
1
k
−
1
(
∑
d
=
0
n
−
1
k
d
+
1
−
n
)
=
1
k
−
1
(
k
n
+
1
−
k
k
−
1
−
n
)
\begin{aligned} &\sum_{d=0}^{n-1}{k^d\times d}\\ =&\sum_{d=0}^{n-1}{\sum_{d'=0}^{d}{k^{d'}}}\\ =&\sum_{d=0}^{n-1}{\frac{k^{d+1}-1}{k-1}}\\ =&\frac{1}{k-1}(\sum_{d=0}^{n-1}{k^{d+1}}-n)\\ =&\frac{1}{k-1}{(\frac{k^{n+1}-k}{k-1}-n)} \end{aligned}
====d=0∑n−1kd×dd=0∑n−1d′=0∑dkd′d=0∑n−1k−1kd+1−1k−11(d=0∑n−1kd+1−n)k−11(k−1kn+1−k−n)
把这个代入进去,就可以
O
(
log
p
)
O(\log{p})
O(logp) 求解。
题解给了一个简洁的式子,我这里就不再推导了。