CSP模拟50

发布时间 2023-10-07 19:58:02作者: -白简-

异或

从低到高第 \(i\) 位的值每隔 \(2^i\) 个数变化一次,于是第 \(i\) 位对答案的贡献是 \(\left\lfloor \dfrac{n}{2^i} \right\rfloor\),把每一位贡献加起来。

赌神

幕后黑手的策略是尽可能保证剩下球的颜色多一些,否则最后颜色少的时候会导致赌神能带走的筹码非常多。

赌神为了防止幕后黑手根据自己的方案作出对应,他最优应当按照剩下球不同颜色数量的比例去押筹码。

这样我们就可以用一个优先队列维护剩下的球,然后每次计算贡献即可。

路径

首先考虑把 \(k\) 次方转化掉,利用第二类斯特林数的性质

\[n^k=\sum^{\min(n,k)}_{i=1}\dbinom{n}{i}\times i! \times {k \brace i} \]

考虑其组合意义,等式左边可以理解为将 \(k\) 个球放入 \(n\) 个盒子的方案数,对于每个球有 \(n\) 种可能,盒子与球都是有差别的。

等式右边我们理解为枚举盒子,从 \(n\) 个盒子中选 \(i\) 个,然后将 \(k\) 个球划分为无差别的 \(i\) 个集合,所以我们要乘上 \(i!\) 把盒子的差别补上。

所以我们可以把原式化简,设 \(S(u)\)\(u\) 到其他点的距离的 \(k\) 次幂之和,

\[\begin{aligned} S(u) &= \sum^{n}_{v=1}\operatorname{dist}(u,v)^k \\ &= \sum^{n}_{v=1}\sum^{k}_{i=1}{\operatorname{dist}(u,v) \choose i} \times i! \times {k \brace i} \\ &= \sum^{k}_{i=1} i! \times {k \brace i} \sum^{n}_{v=1}{\operatorname{dist}(u,v) \choose i} \\ \end{aligned} \]

\(dp(u,t) = \displaystyle\sum^n\limits_{v=1} \dbinom{\operatorname{dist}(u,v)}{t}\),我们分子树内和子树外两部分处理。

\(f(u,t)\) 表示以 \(u\) 为根的子树内的 \(\dbinom{\operatorname{dist}(u,v)}{t}\) 之和,\(\operatorname{g}(u,t)\) 表示不在以 \(u\) 为根的子树内的 \(\dbinom{\operatorname{dist}(u,v)}{t}\)

温馨提示,以下篇幅大量用到杨辉三角递推式:

\[{n \choose m}={n - 1 \choose m} + {n - 1 \choose m - 1} \]


首先考虑求出子树内部分的贡献,对于 \(x \in \operatorname{son}_u,v \in \operatorname{subtree}_x\),显然有 \(\operatorname{dist}(u,v) = \operatorname{dist}(x,v) + 1\),那么有

\[\begin{aligned} f(u,t) &= \sum_{v \in \operatorname{subtree}_u}{\operatorname{dist}(u,v) \choose t} \\ &= \sum_{x \in \operatorname{son}_u}\sum_{v \in \operatorname{subtree}_x}{\operatorname{dist}(u,v) \choose t} \\ &= \sum_{x \in \operatorname{son}_u}\sum_{v \in \operatorname{subtree}_x}{\operatorname{dist}(x,v) + 1 \choose t} \\ &= \sum_{x \in \operatorname{son}_u}\sum_{v \in \operatorname{subtree}_x}{\operatorname{dist}(x,v) \choose t} +{\operatorname{dist}(x,v) \choose t - 1} \\ &= \sum_{x \in \operatorname{son}_u}f(x,t)+f(x,t - 1) \end{aligned} \]

显然对于 \(x \in \operatorname{son}_u,v \in \operatorname{subtree}_x\),有 \(\operatorname{dist}(x,v)=\operatorname{dist}(u,v) - 1\);对于 \(x \in \operatorname{son}_u,v \notin \operatorname{subtree}_x\),有 \(\operatorname{dist}(x,v)=\operatorname{dist}(u,v) + 1\)

那我们现在可以处理子树内和子树外贡献的和了,考虑设 \(fa\)\(u\) 的父亲。

\[\begin{aligned} dp(u,t) =&f(u,t)+g(u,t) \\ =& \sum_{v \in \operatorname{subtree}_u} {\operatorname{dist}(u,v) \choose t} + \sum_{v \notin \operatorname{subtree}_u} {\operatorname{dist}(u,v) \choose t} \\ =& \sum_{v \in \operatorname{subtree}_u} {\operatorname{dist}(fa,v) - 1 \choose t} + \sum_{v \notin \operatorname{subtree}_u} {\operatorname{dist}(fa,v) + 1 \choose t} \\ =& \sum_{v \in \operatorname{subtree}_u} {\operatorname{dist}(fa,v) \choose t} - \sum_{v \in \operatorname{subtree}_u} {\operatorname{dist}(fa,v)-1 \choose t-1} + \\ &\sum_{v \notin \operatorname{subtree}_u} {\operatorname{dist}(fa,v) \choose t} + \sum_{v \notin \operatorname{subtree}_u} {\operatorname{dist}(fa,v) \choose t-1} \\ =& \sum_{v \in \operatorname{subtree}_u} {\operatorname{dist}(fa,v) \choose t} + \sum_{v \notin \operatorname{subtree}_u} {\operatorname{dist}(fa,v) \choose t} - \\ &\sum_{v \in \operatorname{subtree}_u} {\operatorname{dist}(fa,v)-1 \choose t-1} + \sum_{v \notin \operatorname{subtree}_u} {\operatorname{dist}(fa,v) \choose t-1} \\ =& \sum_{v \in \operatorname{subtree}_u} {\operatorname{dist}(fa,v) \choose t} + \sum_{v \notin \operatorname{subtree}_u} {\operatorname{dist}(fa,v) \choose t} + \\ &\sum_{v \in \operatorname{subtree}_u} {\operatorname{dist}(fa,v) \choose t -1} + \sum_{v \notin \operatorname{subtree}_u} {\operatorname{dist}(fa,v) \choose t-1} - \\ &\sum_{v \in \operatorname{subtree}_u} {\operatorname{dist}(fa,v) \choose t -1} - \sum_{v \in \operatorname{subtree}_u} {\operatorname{dist}(fa,v)-1 \choose t-1} \\ =& dp(fa,t)+dp(fa,t - 1) - \sum_{v \in \operatorname{subtree}_u} {\operatorname{dist}(fa,v) \choose t -1} - \sum_{v \in \operatorname{subtree}_u} {\operatorname{dist}(fa,v)-1 \choose t-1} \\ &= dp(fa,t)+dp(fa,t - 1) - \sum_{v \in \operatorname{subtree}_u} {\operatorname{dist}(fa,v)-1 \choose t-1} - \\ &\sum_{v \in \operatorname{subtree}_u} {\operatorname{dist}(fa,v)-1 \choose t-2} - \sum_{v \in \operatorname{subtree}_u} {\operatorname{dist}(fa,v)-1 \choose t-1} \\ &= dp(fa,t)+dp(fa,t - 1) - \\ &\sum_{v \in \operatorname{subtree}_u} {\operatorname{dist}(u,v) \choose t-1} - \sum_{v \in \operatorname{subtree}_u} {\operatorname{dist}(u,v) \choose t-2} - \\ &\sum_{v \in \operatorname{subtree}_u} {\operatorname{dist}(u,v) \choose t-1} \\ =& dp(fa,t)+dp(fa,t - 1)-2f(u,t-1)-f(u,t-2) \\ \end{aligned} \]

那我们就可以递推预处理斯特林数和阶乘,之后换根 DP 求解。

还没改,如果日后哪天没有模拟赛的话会改。