Loading

ARC167C

ARC167C

神秘计数,对着官方题解瞪了好一会,主要是题目太绕了。

题意

给定一个长度为 $n$ 的序列 $A_i$ 和数字 $k$,对于所有长度为 $n$ 的排列,考虑以下问题:

$\forall 1 \le i < j \le n$,若 $j-i\le K$ 在 $i$ 到 $j$ 之间建一条无向边,边权为 $\max(A_{P_i},A_{P_j})$。

对于这个无向图,求最小生成树的权值和。

问所有排列的答案和。

$n\le 5000$,$A_i\le 10^9$

Sol

计算所有排列的所有答案之和,显然的想法就是单独计算每一个 $A_i$ 其在最小生成树中出现的次数。先对 $A_i$ 进行排序,这样我们就只需要考虑其相对顺序了。

设 $f(x)$ 表示,对于所有排列 $P$ 以下问题的答案:

$\forall 1 \le i < j \le n$,若 $j-i\le K$ 且 $\max(P_i,P_j)\le x$ 在 $i$ 到 $j$ 之间建一条无向边。求最多能选出来多少条边使之不能够构成任何的环。

那么对于一个 $A_i$ 其出现次数就应该是 $f(i)-f(i-1)$。这个是好理解的,这个 $f$ 的变化量就体现了“由于 $i$ 的变大,新增了多少个边可以选择”,那这个东西恰恰就是 $A_i$ 的出现次数。因此我们要求的答案就是 $\sum A_i(f(i)-f(i-1))$。

思考 $f(x)$ 如何计算。首先我们注意到对于一个排列 $P$,我们并不关心其所有大于 $x$ 的位置。因为他们一定不能够连出来边,而对于所有小于 $x$ 的位置,我们其实也只关系其下表是多少,而不是其具体的值。这时候会发现,其实我们只关心所有 $P_i\le x$ 位置的下标。

我们将这些所有的下标取出来,形成一个序列 $Q$。回到 $j-i\le K$ 的限制,贪心地思考,如果 $Q_i$ 能够向 $Q_{i+1}$ 连边,那么一定是最优的,因为 $Q$ 是一个单调递增的序列。那么问题就变成了,对于所有的 $Q$,我们需要统计其有多少组 $Q_{i+1}-Q_{i}\le K$。再一次考虑贡献:钦定 $(j,j+1)$ 是一个满足条件的组,那么剩下的数随便选择,唯一的限制就是不能选到 $[Q_{j},Q_{j+1}]$ 之间的数字。那么枚举间隔大小 $k'$ 即可计算。之后发现这样的组一共有 $x-1$ 组,即这个长度为 $x$ 的序列任意两个相邻的位置都可以被钦定。这部分的答案就是

$$ (x-1)\sum_{k'=1}^{K}\binom{n-k'}{x-1} $$

可以理解成在这个值域为 $n$ 的序列中挖掉了一块数字。

统计完所有 $Q$ 的贡献,我们只需要在原来下标位置上所有的数都是 $\le x$ 的,这部分贡献是 $x!$ 剩下的 $(n-x)$ 个数字随便排列。因此得到

$$ f(x)=x!\times (n-x)!\times (x-1)\sum_{k'=1}^{K}\binom{n-k'}{x-1} $$

此时就可以做到 $\mathcal{O}(nK)$ 计算。当然通过预处理做到 $\mathcal{O}(1)$ 计算 $f(x)$。

ATC 提交记录

posted @ 2023-10-16 16:35  Jryno1  阅读(16)  评论(0)    收藏  举报  来源