首先我们需要知道一个这样的性质:
ϕ(ab)=ϕ(gcd(a,b))ϕ(a)ϕ(b)gcd(a,b)
我:???
这个由ϕ(n)=n∏p(1−p1)容易验证
这样有啥好处呢?我们就召唤出了反演中最喜欢的gcd!
然后我们套路地枚举个gcd召唤个mu,枚举t=g∗d
然后就可以推出这样的柿子:
t=1∑nd∣t∑ϕ(d)d∗μ(dt)i=1∑tnj=1∑tnϕ(it)ϕ(jt)dis(pos[it],pos[jt])
其中pos[i]表示权值为i的是第几个点,即pos[a[i]]=i;
然后,可以发现前后两部分并没有关系
t=1∑n(d∣t∑ϕ(d)d∗μ(dt))(i=1∑tnj=1∑tnϕ(it)ϕ(jt)dis(pos[it],pos[jt]))
可以令g(t)=∑d∣tϕ(d)d∗μ(dt),直接nlnn预处理即可。
令f(t)=∑i=1tn∑j=1tnϕ(it)ϕ(jt)dis(pos[it],pos[jt])
然后不太好弄,我们把dis拆开
f(t)=i=1∑tnj=1∑tnϕ(it)ϕ(jt)(dep[pos[it]]+dep[pos[jt]]−2∗dep[lca])
拆开
f(t)=i=1∑tnj=1∑tnϕ(it)ϕ(jt)dep[pos[it]]+ϕ(it)ϕ(jt)dep[pos[jt]]−2∗ϕ(it)ϕ(jt)dep[lca]
可以发现前两项是相同的,可以O(tn)处理。
具体来说是整成这样:(∑i=1tnϕ(it)dep[pos[it]])(∑i=1tnϕ(it))
然后后面那部分f(t)=2∗∑i=1tn∑j=1tnϕ(it)ϕ(jt)dep[lca(pos[it],pos[jt])]
然后我们把所有pos[it] (pos[jt]一样)拿出来建虚树,一共不会超过nlnn个点
然后像这道题一样,在lca处一个一个子树合并(别忘了考虑他自己和自己及子树内点的lca也是他自己),就可以做了!(别忘了虚树中只有关键点的phi计入)
反正大概就是x1∗y1+x2∗y1+x3∗y1+x1∗y2+x2∗y2+x3∗y2+x3∗y1+x1∗y3+x2∗y3+x3∗y3=(x1+x2+x3)(y1+y2+y3)这种,于是维护子树内关键点的phi值和,然后再乘上自己的dep就可以了。
Finished! by zhqwq