推歌: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\) de)。
因為有 \(\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}}\) ,一樣卷積即可。