2024.10.19總結

鳶一折紙發表於2024-10-19

本文於 github 部落格同步更新。

A:

考慮隨便取一個數 \(v\),用一次詢問問出 \(t=\log_g v\)

我們希望找到一個 \(x\) 使得 \(v^x\equiv g\pmod p\),也即 \(g^{tx}\equiv g\pmod p\iff tx\equiv 1\pmod {p-1}\)。於是,我們希望找到的 \(v\) 使得 \(t\)\(p-1\) 互質即可。

由原根的相關知識我們知道,這樣的 \(v\) 就是 \(\pmod p\) 意義下的原根。於是找到 \(\pmod p\) 意義下的最小原根後,即可在一次詢問內解決問題。

B:

沒改。

C:

邊分治。

假設我們現在欽定了一條邊,那麼這條邊一定將圖劃分為兩部分,而且從一部分中的點 \(a\) 到另一部分中的點 \(b\) 一定經過這條邊的端點之一。

設兩端點為 \(l,r\),那麼 \(dis_{a,b}=\min(dis_{a,l}+dis_{l,b},dis_{a,r}+dis_{r,b})\),而 \(a_u+a_v\le b_u+b_v\iff a_u-b_u\le b_v-a_v\),排一遍序即可統計跨過這條邊的答案。

考慮每次找到左右兩部分邊數最接近的邊,不斷分治即可,時間複雜度為 \(\mathcal O(n\log^2n)\)