2024.7.20 鲜花
推歌:Dive Back In Time
点分治好题
翻译成人话:
给定一颗树,求:
\[\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
——————————————————————————————————————————————————————————————————————————————————————————————————————————
本文来自博客园,作者:xrlong,转载请注明原文链接:https://www.cnblogs.com/xrlong/p/18312644