[转载]CF809E Surprise me!

首先我们需要知道一个这样的性质:

ϕ(ab)=ϕ(a)ϕ(b)gcd⁡(a,b)ϕ(gcd⁡(a,b))\phi(ab)=\frac{\phi(a)\phi(b)\gcd(a,b)}{\phi(\gcd(a,b))}

我:???

这个由ϕ(n)=n∏p(1−1p)\phi(n)=n\prod_{p}(1-\frac{1}{p})容易验证

这样有啥好处呢?我们就召唤出了反演中最喜欢的gcd!

然后我们套路地枚举个gcd召唤个mu,枚举t=g∗dt=g*d

然后就可以推出这样的柿子:

∑t=1n∑d∣td∗μ(td)ϕ(d)∑i=1nt∑j=1ntϕ(it)ϕ(jt)dis(pos[it],pos[jt])\sum_{t=1}^n\sum_{d|t}\frac{d*\mu(\frac{t}{d})}{\phi(d)}\sum_{i=1}^{\frac{n}{t}}\sum_{j=1}^{\frac{n}{t}}\phi(it)\phi(jt)dis(pos[it],pos[jt])

其中pos[i]pos[i]表示权值为i的是第几个点,即pos[a[i]]=i;

然后,可以发现前后两部分并没有关系

∑t=1n(∑d∣td∗μ(td)ϕ(d))(∑i=1nt∑j=1ntϕ(it)ϕ(jt)dis(pos[it],pos[jt]))\sum_{t=1}^n\big(\sum_{d|t}\frac{d*\mu(\frac{t}{d})}{\phi(d)}\big)\big(\sum_{i=1}^{\frac{n}{t}}\sum_{j=1}^{\frac{n}{t}}\phi(it)\phi(jt)dis(pos[it],pos[jt])\big)

可以令g(t)=∑d∣td∗μ(td)ϕ(d)g(t)=\sum_{d|t}\frac{d*\mu(\frac{t}{d})}{\phi(d)},直接nln⁡nn\ln n预处理即可。

令f(t)=∑i=1nt∑j=1ntϕ(it)ϕ(jt)dis(pos[it],pos[jt])f(t)=\sum_{i=1}^{\frac{n}{t}}\sum_{j=1}^{\frac{n}{t}}\phi(it)\phi(jt)dis(pos[it],pos[jt])

然后不太好弄,我们把dis拆开

f(t)=∑i=1nt∑j=1ntϕ(it)ϕ(jt)(dep[pos[it]]+dep[pos[jt]]−2∗dep[lca])f(t)=\sum_{i=1}^{\frac{n}{t}}\sum_{j=1}^{\frac{n}{t}}\phi(it)\phi(jt)(dep[pos[it]]+dep[pos[jt]]-2*dep[lca])

拆开

f(t)=∑i=1nt∑j=1ntϕ(it)ϕ(jt)dep[pos[it]]+ϕ(it)ϕ(jt)dep[pos[jt]]−2∗ϕ(it)ϕ(jt)dep[lca]f(t)=\sum_{i=1}^{\frac{n}{t}}\sum_{j=1}^{\frac{n}{t}}\phi(it)\phi(jt)dep[pos[it]]+\phi(it)\phi(jt)dep[pos[jt]]-2*\phi(it)\phi(jt)dep[lca]

可以发现前两项是相同的,可以O(nt)O(\frac{n}{t})处理。

具体来说是整成这样:(∑i=1ntϕ(it)dep[pos[it]])(∑i=1ntϕ(it))\sum_{i=1}^{\frac{n}{t}}\phi(it)dep[pos[it]])(\sum_{i=1}^{\frac{n}{t}}\phi(it))

然后后面那部分f(t)=2∗∑i=1nt∑j=1ntϕ(it)ϕ(jt)dep[lca(pos[it],pos[jt])]f(t)=2*\sum_{i=1}^{\frac{n}{t}}\sum_{j=1}^{\frac{n}{t}}\phi(it)\phi(jt)dep[lca(pos[it],pos[jt])]

然后我们把所有pos[it] (pos[jt]一样)拿出来建虚树,一共不会超过nln⁡nn\ln n个点

然后像这道题一样,在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)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