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(i1)f_i=g(i)-g(i-1)

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

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

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

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

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

(x1)j=1k(njx1)(x-1)\sum_{j=1}^{k}\begin{pmatrix}n-j\\x-1\end{pmatrix}

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

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

gi=i!(ni)!(i1)j=1k(nji1)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  阅读(12)  评论(0)    收藏  举报  来源