省选联考 2024 重塑时光 解题报告

首先第一步是转化为计数问题,考虑到初始划分的方案数是区分每次操作的,每一种方案都对应了 \(k!\) 种操作,所以不用区分。那么总方案数就是 \(n!\binom{n+k}k\),而如果划分成了 \(i\) 段,那么对应的排列及划分的方案数就是 \(i!\binom{k+1}i\),上面的式子都容易用隔板法推导。

然后问题转化为对于所有 \(i\) 求把 \(1,\dots,n\) 划分为 \(i\) 段,段内顺序固定,段与段之间顺序任意且满足条件的方案数。首先每个段内部要求合法,其次段与段之间根据限制可以连边:若存在限制 \((x,y)\),\(x\in A,y\in B\),则连边 \(A\rightarrow B\),要求最后连成 DAG。于是变成了 DAG 计数问题。

令 \(f(S,i)\) 表示把 \(S\) 中的点划分为 \(i\) 个块的方案数,根据 DAG 的子结构,转移考虑钦定入度为 \(0\) 的块包含的点集 \(T\) 和零度块的个数 \(j\),设点集 \(T\) 划分为 \(j\) 个块,两两块之间没有连边的方案数为 \(g(T,j)\),那么根据主旋律中的推导,或者下面的推导:对于一个大小为 \(q\) 的零度块集合 \(X\),会被算 \(\sum\binom qj\) 次,所以我们对于每个 \(j\) 乘上一个 \((-1)^{j+1}\) 的容斥系数,由于 \(\sum\limits_{j=1}^q\binom qj(-1)^{j+1}=1\),所以不会算重。

于是有转移

\[f(S,i)=\sum\limits_{T\ne\varnothing,T\subseteq S,}\sum\limits_{j=1}^{|T|}g(T,j)f(S\setminus T,i-j) \]

其中要求 \(S\setminus T\) 不能向 \(T\) 连边。然后考虑 \(g(S,i)\) 的转移,枚举 \(\text{lowbit}(S)\) 所在块的点集 \(T\),设 \(h(S)\) 表示 \(S\) 中的点构成一个合法块的方案数,则有

\[g(S,i)=\sum\limits_{\text{lowbit}(S)\in T\subseteq S}g(S\setminus T,i-1)h(T) \]

再考虑 \(h(S)\) 的转移,其实就是把原图的限制看成一张 DAG,那么就是求 \(S\) 的导出子图的拓扑序数,不妨设 \(v\) 为拓扑序最小的点,则要求 \(v\) 的入点都不在 \(S\) 内,有转移

\[h(S)=\sum\limits_vh(S\setminus\{v\}) \]

于是得到了 \(\mathcal{O}(3^nn^2)\) 的做法,瓶颈在于 \(f\) 的转移。

考虑 \(f(S,i)\) 可以看成是关于 \(S\) 的 \(n\) 次多项式,那么转移就是 \(g(T)\) 和 \(f(T\setminus S)\) 的卷积,也就是说,令 \(F_S(x)=\sum\limits_{i=0}^nf(S,i)x^i\),最后所求为 \(F_U(x)\)。由于 \(\deg F_U(x)\le n\),所以只需要知道 \(n+1\) 个不同的点值 \(F_U(1),F_U(2),\dots,F_U(n+1)\) 就可以拉插了,而对于一个固定的 \(x\) 求 \(F_S(x)\) 是只需要 \(\mathcal{O}(3^nn)\) 的,于是复杂度优化为 \(\mathcal{O}(3^nn+2^nn^2)\)。

总结:本题的关键部分,其一是关于 DAG 子结构的容斥,系数为 \((-1)^{j+1}\),其二是由于辅助维上的转移是卷积的形式,可以看成多项式然后插值求解。

posted @ 2026-09-02 21:04  循环一号  阅读(19)  评论(0)    收藏  举报