9.12 模擬賽

2huk發表於2024-09-12

B. la

題意:給定 \(n, m\)\(1 \sim m\) 的排列 \(b\)。有一個長度為 \(n\) 的陣列 \(a\),所有 \(a_i\) 的值在 \([1, m]\) 中隨機。定義一次變換為同時對所有 \(i \in [1, n]\) 執行 \(a_i \gets b_{a_i}\)。求期望多少次能將所有 \(a\) 變回原樣。

首先將期望轉化成答案總和除以 \(m^n\)

考慮連邊 \(i \to b_i\),表示若 \(x = i\)\(x\) 可以透過一次變換成為 \(b_i\)

因為 \(b\) 是個排列,且 \(i\) 互不相同,所以圖中所有點的入度和出度都為 \(1\)。也就是說整張圖是由若干個環構成的。當然也包括自環。

令某個環的大小為 \(s\)。那麼這個環上的任意一個點都可以透過 \(s \times k\)\(k \in \mathbb N\))次變換回到開始。

所以若我們令 \(i\) 所在的環的大小為 \(w_i\),那麼當 \(a\) 確定時答案為 \(\operatorname{lcm}(w_{a_1}, w_{a_2}, \dots, w_{a_n})\)

暴力列舉 \(a\) 顯然不行。考慮最佳化。

思考 \(\operatorname{lcm}\) 的性質。這個運算關注的是一個數字是否出現過,而跟這個數字出現的次數沒有關係。例如 \(\operatorname{lcm}(3, 5, 7) = \operatorname{lcm}(3, 5, 7, 7, 7) \ne \operatorname{lcm}(3, 5)\)

注意到 \(m \le 100\)。這意味著圖中環的長度只有不超過 \(13\)。因為 \(1 + 2 + \dots + 13+14 = 105 > m\)。注意這裡說的是長度的種類數而不是環的個數。

所以我們要計算的答案 \(\operatorname{lcm}(w_{a_1}, w_{a_2}, \dots, w_{a_n})\) 裡,集合 \(\{w_{a_1}, w_{a_2}, \dots, w_{a_n}\}\) 的大小不超過 \(13\)。所以我們可以以 \(2^{13}\) 的複雜度列舉這個集合!算出 \(\operatorname{lcm}\) 後再算一個方案數乘起來就是答案!

具體的,我們列舉環長集合(即每種環的長度構成的集合)的子集 \(S\)。若我們能計算出有多少個 \(a\),使得每個 \(a_i\) 都滿足 \(w_{a_i} \in S\),且對於每個 \(v \in S\) 都存在至少一個 \(a_i = v\)。那麼這樣的 \(a\) 的數量與 \(\operatorname{lcm}_{v \in S} v\) 的乘積再累加即可計算最終答案。

有點抽象。我們再明確一下當前的任務:

  • 計算有多少個 \(a\),滿足:
    • 對於每個 \(a_i\) 都滿足 \(w_{a_i} \in S\)
    • 且對於每個 \(v \in S\) 都存在至少一個 \(a_i = v\)。(這個條件如果不滿足就無法保證 \(\operatorname{lcm}a = \operatorname{lcm}S\)。)

我們預處理一個 \(c_i\) 表示多少 \(j\) 滿足 \(i=w_j\),即每種長度的所有環內的點的數量。

沒有第二個條件很好做。答案是 \((\sum_{v \in S}c_v)^n\)。這是因為 \(a\) 的每一位都有 \(\sum_{v \in S}c_v\) 種方案。令 \(g(S) = (\sum_{v \in S}c_v)^n\)

我們令有了第二個條件後的答案為 \(f(S)\)。那麼可以容斥。即:

\[f(S) = \sum_{T \subseteq S} (-1)^{|S| - |T|}g(S) \]

所以答案為:

\[\sum_{S \subseteq U} f(S) \times \operatorname{lcm}_{v \in S}v \]