题目描述
给定一棵 n n n个点的以 1 1 1为根的有根树,设 d ( a , b ) d(a,b) d(a,b)表示 a a a, b b b两点的树上距离,对于 ∀ i ∈ [ 1 , n ) \forall i\in[1,n) ∀i∈[1,n),求出有多少对 x , y x,y x,y满足 gcd ( d ( x , l c a ( x , y ) ) , d ( y , l c a ( x , y ) ) = i \gcd(d(x,lca(x,y)),d(y,lca(x,y))=i gcd(d(x,lca(x,y)),d(y,lca(x,y))=i
n ≤ 200000 n\le200000 n≤200000
题解
首先把 l c a ( x , y ) = x 或 y lca(x,y)=x或y lca(x,y)=x或y的给处理了
转化一下题目,求出 g ( d ) = [ d ∣ i ] ⋅ a n s i g(d)=[d|i]\cdot ans_i g(d)=[d∣i]⋅ansi,最后容斥一下就可以得到 a n s ans ans
考虑一个提示性部分分:除根结点外的每个结点至多拥有一个孩子
相当于在根上挂上了若干条链,设第 i i i条链长度为 h i h_i hi,对于一个 d d d,第 i i i条链高度为 d d d的倍数的点有 ⌊ h i d ⌋ \lfloor\frac{h_i}{d}\rfloor ⌊dhi⌋个, g ( d ) = ∑ i < j ⌊ h i d ⌋ ⌊ h j d ⌋ g(d)=\sum_{i<j}\lfloor\frac{h_i}{d}\rfloor\lfloor\frac{h_j}{d}\rfloor g(d)=∑i<j⌊dhi⌋⌊dhj⌋,这个随便处理一下就可以做到 O ( n ) O(n) O(n)
接下来考虑点分治,设当前分治中心为 m i d mid mid,根为 r t rt