2024.7.20 鮮花

xrlong發表於2024-07-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\) 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}}\) ,一樣卷積即可。

Miku

相關文章