闲话9.4

发布时间 2023-09-04 21:42:59作者: crimson000

今天终于没有摆一天了。

今天上午把昨天晚上剩的一道题写了写,然后补了补期望???,期望啥都不会了???

下午听 llx 讲组合数学???,收获很多???

晚上瞎几把写题,收获很多???

好消息:把博客搞到 netlify 上了,评论功能也不用挂梯子喽!

更好消息:发现 netlify.net 是黄色网站

另报:给博客搞上了页面内播放器,舒服???

逆天姬芈

jimmy:你这个 main 函数为什么是 signed 类型的啊
jimmy:我还是推荐大家用一些 c++ 标准的写法啊
jimmy:你这个不标准的写法考试的时候可能吃大亏

不好评价

又被 haosen D 了???

记录经典


推歌:デザイアドライブ -上海アリス幻樂団

欲望加速。虽然之前没怎么听过(就打过一次庙),但是看 B 站的时候看到有人提到,正好逛正作原曲的时候看到了这首,听了下发现是真的好听!


CF809E

比较套路的题。

我们先把 \(\varphi(a_ia_j)\) 转化为 \(\frac{\varphi (a_i)\varphi (a_j)}{\varphi (\gcd (a_i, a_j))}\)。然后我们大力推式子:

\[\sum \limits_{i=1}^n \sum \limits_{j=1}^n \frac{\varphi (a_i)\varphi (a_j)}{\varphi (\gcd (a_i, a_j))}dist(i, j) \]

我们先枚举 \(\gcd\),我们就能得到:

\[\begin{aligned} \sum_{d=1}^n \frac{1}{\varphi(d)} \sum \limits_{i=1}^n \sum \limits_{j=1}^n \varphi (a_i)\varphi (a_j)dist(i, j)[\gcd(a_i, a_j)=d] \end{aligned} \]

我们直接使用莫反套路,把 \([\gcd(i, j)=d]\) 变为 \([\gcd(i, j)|d]\),得到:

\[\begin{aligned} \sum_{d=1}^n \frac{1}{\varphi(d)} \sum \limits_{i=1}^n \sum \limits_{j=1}^n \varphi (a_i)\varphi (a_j)dist(i, j)[\gcd(a_i, a_j)|d] \end{aligned} \]

我们把所有是 \(d\) 倍数的点扣下来建个虚树,中括号就能消掉。然后就考虑 dp 求出这一坨。

\[\begin{aligned} \sum \limits_{i=1}^m \sum \limits_{j=1}^m \varphi (a_i)\varphi (a_j)dist(i, j)&=\frac{1}{\varphi(d)} \sum \limits_{i=1}^m \sum \limits_{j=1}^m \varphi (a_i)\varphi (a_j)(dep_i+dep_j-2\times dep_{lca_{i, j}})\\ \end{aligned} \]

我们把后面括号拆开后发现前两项是相同的,最后一项可以直接虚树上 dp 求出来。

最后我们莫反一下,即可得到答案。

复杂度建虚树一个 \(\log\),找倍数一个 \(\log\),总共 \(O(n\log^2n)\)


由于 haosen 不看图图,所以今天不放图了。

鉴于 haosen 求情,还是放张图吧。