題目描述
題解
考慮到恰好爲 不好求,我們可以求 的倍數的個數然後容斥。於是我們可以枚舉 作爲 ,我們要計算 都是 的倍數的 數對數。因爲這個跟深度有關,容易想到長鏈剖分。但是我們不能去跳最深深度的倍數,所以我們考慮分塊,如果 ,那麼單次跳不會超過 次,否則我們可以設 表示 的 的個數,枚舉 即可。這樣就避免了枚舉最深深度,因此總效率爲 。
考慮到恰好爲 i 不好求,我們可以求 i 的倍數的個數然後容斥。於是我們可以枚舉 x 作爲 lca ,我們要計算 d(u,x),d(v,x) 都是 i 的倍數的 (u,v) 數對數。因爲這個跟深度有關,容易想到長鏈剖分。但是我們不能去跳最深深度的倍數,所以我們考慮分塊,如果 deep>n ,那麼單次跳不會超過 n 次,否則我們可以設 g[i][j] 表示 dp[v]%i=j 的 v 的個數,枚舉 i 即可。這樣就避免了枚舉最深深度,因此總效率爲 O(nn) 。