P12579 [UOI 2021] 哥萨克与 GCD

首先给需要确定的数组 \(b\) 做一个前缀和 \(s\),于是确定了 \(b\) 等价于确定了 \(s\)

\(b_l+b_{l+1}+...+b_r=s_r-s_{l-1}\),相当于确定了两个 \(s\) 之间的关系。因此我们现在有 \(s_0\) 需要确定其它的 \(s\) 等价于让这些 \(s\) 连通。

因此我们把两两 \(s\) 连边然后跑 \(prim\) 可以得到一个 \(O(n^2)\) 的算法。

但这个复杂度是不能过的。我们并没有类似于直接加速完全图最小生成树的手法,但是一般这样的题都会根据边权的计算方式有自己的性质来减少连边。

观察 \(Boruvka\) 的流程,可以发现每次两边的连边只会是 \((i,0)\)\((i,n)\),它们是连接时最短的。于是令 \(l_i=w(i,0),r_i=w(i,n)\),那么答案为 \(\sum min(l_i,r_i)-w(0,n)\)。发现 \(min(l_i,r_i)\) 的决策有单调性,于是把这些信息维护到线段树上,然后在上面二分这个分界即可。

posted @ 2025-07-30 15:56  v1ne0qrs  阅读(4)  评论(0)    收藏  举报