ABC 210 E
阿新 • • 發佈:2021-07-20
題意
有 \(n\) 個點,\(m\) 種加邊的方法,每種方法給定 \(a_i\) 和 \(c_i\),可將 \(x\) 與\((x+a_i)\bmod n\) 連邊,其中 \(x\in[0,n)\),代價為 \(c_i\)。求使 \(n\) 個點連通的最小代價。
題解
要使圖連通且代價最小,最終一定是一棵樹,只需要求 MST 就行了。
類似 Kruskal 演算法,我們可以把 \(m\) 種方法按 \(c_i\) 排序,然後用第 \(1,2…m\) 種方法一直連邊,直到不能連為止,這樣一定是最優的。但由於 \(n\) 很大,所以需要再優化。
設 \(x_i\) 表示用前 \(i\) 種方法連邊連完後所形成的連通分量的個數,則 \(x_{i-1}-\ x_i\)
\(\sum_{i=1}^mc_i(x_{i-1}-\ x_i)\)
考慮如何求出 \(x_i\)。
轉化一下連邊的方法。使用前 \(i\) 種方法時,點 \(v\) 能與 \(u\) 在同一連通分量內當且僅當\(\exists\) \(k_1,k_2,…,k_i\in\mathbb{Z}\) 使得
\[u \equiv v+k_1a_1+k_2a_2+…+k_ia_i (\bmod\ n) \]\[\begin{aligned} &\Leftrightarrow u=v+k_0n+k_1a_1+k_2a_2+…+k_ia_i \end{aligned} \]設 \(d_i=\gcd(n,a_1,a_2,…,a_i)\)
則 \(u=v+kd_i \Leftrightarrow u \equiv v (\bmod\ d_i)\)
所以 \(n\) 個點按模 \(d_i\) 的餘數分成了 \(d_i\) 個連通分量,\(x_i=d_i\)。
然後將 \(x_i\) 帶入原式即可求解,
若 \(x_m\) 不等於 \(1\),則無解。