CF809E

给一颗树,求

[frac1{n(n-1)}sum_{i=1}^nsum_{j=1}^nφ(a_i*a_j)*dis(i,j)\ 一个柿子φ(ab)=φ(a)φ(b)φ(gcd(a,b)) ]

代入

[sum_{i=1}^nsum_{j=1}^nφ(a_i)φ(a_j)frac{gcd(a_i,a_j)}{φ(gcd(a_i,a_j))}dis(i,j)\ 提出来,相当于令d=那一坨\ largesum_{d=1}^nfrac d{φ(d)}sum_{i=1}^nsum_{j=1}^n[gcd(a_i,a_j)=d]φ(a_i)φ(a_j)dis(i,j)\ ]

尝试设一个函数换掉一大坨,我们康到分数后的一大坨大概和(d)有关,令

[f(d)=sum_{i=1}^nsum_{j=1}^n[gcd(a_i,a_j)=d]φ(a_i)φ(a_j)dis(i,j) ]

搞个反演,假装有

[F(x)=sum_{x|d}f(d) ]

求解(F(x))不难发现

[F(x)=sum_{i=1}^nsum_{j=1}^nφ(a_i)φ(a_j)[x|gcd(a_i,a_j)]dis(i,j) ]

并且

[f(x)=sum_{x|d}F(d)*μ(frac dx) ]

(a)(1sim n)的排列,涉及到点总数为(nln n)的,所以枚举(x),把(x|d)的点拿下来建虚树,

式子变成,(m)个点,点有点权,求:

[sum_{i=1}^msum_{j=1}^mv_i*v_j*dis(i,j)\ sum_{j=1}^msum_{j=1}^mv_i*v_j*(dep_i+dep_j-2*dep_{lca})\ 令s=v_i*v_j\ sum_{i=1}^msum_{j=1}^ms*dep_i+s*dep_j-2*s-dep_{lca}\ ]

拆成三个(sum)

不难发现前两个相同,显然可以(O(m))处理

后面那一坨,需要在树上(dp),在(lca)处合并答案,(dp_i)表示(i)内部子树权值总和,换根(dp)

建虚树(log),复杂度(O(nlog^2n))

代码仙姑(先咕)

原文地址:https://www.cnblogs.com/shikeyu/p/13810038.html