2024.7.20 鲜花

推歌:Dive Back In Time

点分治好题

ZB 的旋转树

翻译成人话:

给定一颗树,求:

\[\sum_{u\not=v} \frac{b_ub_v+\max(b_u,b_v)}{dis_{u,v}+1} \]

考虑点分,考虑求经过根节点的。

先求一部分:

\[\sum_{u\not=v} \frac{b_ub_v}{dis_{u,v}} \]

\[=\sum_{u\not=v} \frac{b_ub_v}{dep_u+dep_v} \]

构造多项式 \(f\),次数表示 \(dep\) ,系数表示这个深度下 \(\sum b\)

这样 \(f*g\) 表示的就是原式,卷完了直接枚举项求即可。

考虑后面的 \(\sum\limits_{u\not=v} \frac{\max(b_u,b_v)}{dis_{u,v}+1}\),为了方便以后的做法,先将 \(\max\) 整成 \(\min\)

\[\sum_{u\not=v} \frac{b_ub_v+\max(b_u,b_v)}{dis_{u,v}+1}=\sum_{u\not=v} \frac{b_ub_v+b_u+b_v-\min(b_u,b_v)}{dis_{u,v}+1} \]

前面可以配成 \(\sum_{u\not=v} \frac{(b_u+1)(b_v+1)}{dis_{u,v}}\),和之前一样处理。

现在只剩下 $$\sum_{u\not=v} \frac{\min(b_u,b_v)}{dis_{u,v}}$$ 需要处理。

\((m(u,v) = k)\) 表示 \(\min(b_u,b_v) = k\) 的点对个数。

发现依然不好做,考虑容斥成 \((m(u,v) \ge k) - (m(u,v) \ge k+1)\)(类似定义)。

于是问题变成了求 $$k\in [1,\max b],\sum_{u\not=v} \frac{(m(u,v) \ge k)}{dis_{u,v}}$$

因为有 \(\sum b\) 限制,考虑阈值分治,在 \(k\ge T\) 以上可以 \(O(n^2)\) 暴力。

其余的直接枚举 \(k\),问题可以转换成 \(\sum_{u\not=v} \frac{[b_u\ge k][b_v \ge k]}{dis_{u,v}}\) ,一样卷积即可。

Miku

posted @ 2024-07-20 06:40  xrlong  阅读(29)  评论(2编辑  收藏  举报