AT_arc167_c [ARC167C] MST on Line++

考虑我们求最小生成树的过程。

sum=∑aifisum=\sum a_i f_i

其中 aia_i 单增,表示第 ii 大的边,fif_i 表示选了权值为 aia_i 的边的数量。

我怎么求数量。

考虑这个问题:

保留原图边权 ≤x\leq x 的边,选择最多的边使得不构成环,答案记为 g(x)g(x)。

则 fi=g(i)−g(i−1)f_i=g(i)-g(i-1)。

为什么。考虑任意取边,能取就取,最后的答案一定为 g(x)g(x),且 g(x)−g(x−1)g(x)-g(x-1) 可以看成某些联通块连在一起了,也就是我们选上 fif_i 条权值为 aia_i 的边。

好了,保留边权 ≤x\leq x 的边,那么我并不需要知道值,只需要知道下标,由于边权要取 max,那么我找到所有 pj≤ip_j \leq i 的下标 jj 记录到集合 S,则 apj≤aia_{p_j}\leq a_i。

将 SS 排序,那么保留边权 ≤ai\leq a_i 的边,相当于 SiS_i 之间两两连边。

我们可以贪心,取 SiS_i 和 Si+1S_{i+1},因为如果相邻 ≤k\leq k 的才有边,而这些对一定能构成边的一组解。

于是我们计数 ∑[Si+1−Si≤k]\sum[S_{i+1}-S_{i}\leq k],假设共有 x=aix=a_i 个数,则有 x−1x-1 段,我们枚举是第几段,和 Si+1−SiS_{i+1}-S_{i} 的值,有:

(x−1)∑j=1k(n−jx−1)(x-1)\sum_{j=1}^{k}\begin{pmatrix}n-j\\x-1\end{pmatrix}

意思是我们选除了 si+1s_{i+1} 的其他 x−1x-1 个数,因为 si+1s_{i+1} 可以推出来,然后因为 SiS_i 和 Si+1S_{i+1} 在排序后是相邻的,那么取的数不能在 [Si,Si+1][S_i,S_{i+1}] 中。

再算上排列的方案数,有:

gi=i!(n−i)!(i−1)∑j=1k(n−ji−1)g_i=i!(n-i)!(i-1)\sum_{j=1}^{k}\begin{pmatrix}n-j\\i-1\end{pmatrix}

答案随便算了。

当然,可以上指标求和。

posted @ 2023-10-25 20:31  蒟蒻orz  阅读(38)  评论(0)    收藏  举报  来源