ABC 210 E
题意
有 \(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\)表示用第 \(i\) 种方法所连的边数,其中 \(x_0=n\),所以答案为:
\(\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\),则无解。

浙公网安备 33010602011771号