alpha1022 kullanıcısının blogu

Bloglar

一些年久失修的生成函数技术

By alpha1022

前言

GPT 时代感觉多项式题正在失去存在意义,因此撰写这篇文章整理了一些我之前考虑过并由 GPT 完善的多项式技术,基本以题目的形式呈现。

事实上就是把自己以前的 idea 用 GPT 改善一遍顺便发出来。

网格图完美匹配计数

简要题意

给定 $n\times m$ 的网格图,顶点为 $(i,j)$($1\le i\le n$,$1\le j\le m$),曼哈顿距离为 $1$ 的两个顶点之间连边,求完美匹配数模 $998244353$。保证 $2\mid nm$,$1\le n\le 10^9$,$1\le m\le 5\times 10^4$。

相关题目:Timus 1594 Aztec Treasure,两边长度均不超过 $100$,模数为 $10^9+7$;QOJ 2447 Domino Covering,短边不超过 $35$,长边不超过 $10^{18}$,模数为输入的素数。

简要题解

记 $r_s(j)=2\cos\frac{j\pi}{s+1}$,$a=\lfloor n/2\rfloor$,$b=\lfloor m/2\rfloor$。由经典的 Kasteleyn–Temperley–Fisher 公式,完美匹配数为

$$ D_{n,m}=\prod_{j=1}^{b}\prod_{k=1}^{a}\bigl(r_m(j)^2+r_n(k)^2\bigr). $$

若某一维为奇数,经典公式还包含零根对应的因子;另一维为偶数,而 $\prod_{j=1}^{s/2}r_s(j)^2=1$($s$ 为偶数),所以这些因子可以省略。

令 $F_s(x)=U_s(x/2)$,其中 $U_s$ 是第二类 Chebyshev 多项式,则

$$ F_s(x)=\prod_{j=1}^s(x-r_s(j)) =\sum_{t=0}^{\lfloor s/2\rfloor}(-1)^t\binom{s-t}{t}x^{s-2t}. $$

将正负成对的根合并,定义首一整系数多项式

$$ H_s(y)=\prod_{j=1}^{\lfloor s/2\rfloor}(y-r_s(j)^2), \qquad F_s(x)=x^{s\bmod 2}H_s(x^2). $$

于是答案可以写成结式

$$ D_{n,m}=(-1)^{ab}\operatorname{res}\bigl(H_m(y),H_n(-y)\bigr). $$

其中 $(-1)^{ab}$ 来自 $H_n(-y)=(-1)^a\prod_{k=1}^a(y+r_n(k)^2)$。这是整系数恒等式,可以直接模 $998244353$ 计算。

$H_m$ 的系数可以从 $F_m$ 的系数公式中 $O(m)$ 求出。由于 $H_m$ 首一,只需求 $H_n(-y)\bmod H_m(y)$,再计算结式。固定 $\varepsilon\in\{0,1\}$,令 $A_t(y)=H_{2t+\varepsilon}(y)$,由 Chebyshev 多项式的递推关系可得

$$ A_0=1,\qquad A_1=y-(1+\varepsilon),\qquad A_t=(y-2)A_{t-1}-A_{t-2}\quad(t\ge2). $$

取 $\varepsilon=n\bmod2$,将 $y$ 换成 $-y$,在模 $H_m$ 的商环中对递推矩阵快速幂,即可 $O(m\log m\log n)$ 求出余式。最后用折半 Euclid 算法 $O(m\log^2m)$ 求结式,总复杂度为 $O(m\log m(\log n+\log m))$。$m=1$ 时单独返回 $1$。

关于经典乘积公式及结式的联系,可参见 Counting Domino Tilings of Rectangles via Resultants。

同色连通块赋权的树计数

简要题意

给定 $m$ 种颜色及系数 $c_1,c_2,\dots,c_N$。对于一棵点带颜色的标号无根树,设其所有极大同色连通块为 $C_1,\dots,C_t$,定义权值为 $\prod_{i=1}^t c_{|C_i|}$。对每个 $1\le n\le N$,求所有 $n$ 个点的这类树的权值之和。

答案模 $998244353$,$N\le10^5$,$1\le m<998244353$,$0\le c_j<998244353$。取 $c_j=[j\le k]$ 即为限制同色连通块大小不超过 $k$ 的情形。

简要题解

先计数有根树。令 $F(x)$ 为有根颜色树的带权 EGF,并令

$$ G(x)=\sum_{j=1}^N c_j\frac{j^{j-1}}{j!}x^j. $$

按根所在的极大同色连通块分解:大小为 $j$ 的块内有 $j^{j-1}$ 种有根标号树,带权 $c_j$,整块有 $m$ 种颜色;每个点可以挂任意多棵根颜色不同的子树,权值相乘。因此

$$ F(x)=mG\left(x\exp\left(\frac{m-1}{m}F(x)\right)\right). $$

设 $A=F/m$,$d=m-1$,则 $A=G(x\mathrm e^{dA})$。引入 $B=x\mathrm e^{dA}$,有

$$ B=x\mathrm e^{dG(B)},\qquad B\mathrm e^{-dG(B)}=x. $$

记 $Q(x)=x\mathrm e^{-dG(x)}$,用 $Q^{\langle-1\rangle}$ 表示复合逆,则

$$ B=Q^{\langle-1\rangle},\qquad A=\frac1d\log\frac{B(x)}x\quad(d\ne0). $$

$Q$ 的一次项系数恒为 $1$,所以即使 $c_1=0$,复合逆仍然存在。这样只需求一次多项式指数、一次复合逆和一次对数,无须实际计算 $G(B)$。为求出 $A$ 到 $x^N$,需要将 $Q$ 和 $B$ 算到 $x^{N+1}$。使用二元 Bostan–Mori 实现复合逆,总复杂度 $O(N\log^2N)$,最后答案为 $m(n-1)![x^n]A(x)$。$m=1$ 时单独处理,此时 $A=G$,答案就是 $c_n n^{n-2}$($n=1$ 时为 $c_1$)。

具体地,当 $G(0)=0$、$G'(0)\ne0$ 时,对任意给定的 $R$,不必先求复合逆再复合,可以直接用一次二元 Bostan–Mori 求出 $R\circ G^{\langle-1\rangle}$。由 Lagrange 反演,对 $1\le j\le N$ 有

$$ \begin{aligned} [x^j]R\bigl(G^{\langle-1\rangle}(x)\bigr) &=\frac1j[t^{j-1}]R'(t)\left(\frac{t}{G(t)}\right)^j\\ &=\frac1j[t^{N-1}]R'(t)\left(\frac{t}{G(t)}\right)^N G(t)^{N-j}. \end{aligned} $$

因此只需批量求 $[t^{N-1}]S(t)G(t)^\ell$($0\le\ell<N$),也就是求二元有理式 $S(t)/(1-uG(t))$ 的 $[t^{N-1}]$,其中 $S=R'(t)(t/G(t))^N$,常数项另取 $R(0)$。这同样可以在 $O(N\log^2N)$ 内完成,取 $R(x)=x$ 就是复合逆的情形。

按重数赋权的异或零多重集计数

简要题意

给定 $R=\sum_{i=1}^m2^{a_i}$,其中 $0\le a_1<\cdots<a_m$,以及系数 $b_1,b_2,\dots,b_n$。从 $[0,R)$ 中选出一个大小为 $n$、所有元素的异或和为 $0$ 的多重集。若其中不同的数分别出现了 $k_1,\dots,k_\ell$ 次,定义权值为 $\prod_{i=1}^{\ell}b_{k_i}$,求所有这类多重集的权值之和模 $998244353$。

两种方案仅按各个数的出现次数区分,未出现的数贡献权值 $1$。$1\le n,m\le10^5$,$a_m\le10^{18}$,$0\le b_k<998244353$。

相关题目:QOJ 13267,序列 $b_k$ 仅有 $c$ 项非零。最初出在联考,后来搬到 QOJ。出题时尚在前 $\log^2$ 复合时代,因此加了 $c$ 的限制。

简要题解

令 $f(t)=1+\sum_{k=1}^n b_kt^k$,取 $L=a_m+1$,并记 $\chi_T(S)=(-1)^{\operatorname{popcount}(S\mathbin{\&}T)}$。由异或 FWT,答案为

$$ 2^{-L}[t^n]\sum_{T=0}^{2^L-1}\prod_{S=0}^{R-1}f(\chi_T(S)t). $$

令 $w_T=\sum_{S=0}^{R-1}\chi_T(S)$,则乘积中正号和负号的个数分别为 $(R+w_T)/2$ 和 $(R-w_T)/2$。定义

$$ E(t)=\exp\left(\frac R2\bigl(\log f(t)+\log f(-t)\bigr)\right),\qquad J(t)=\frac{\log f(t)-\log f(-t)}2, $$

答案就变成 $2^{-L}\sum_T[t^n]E(t)\mathrm e^{w_TJ(t)}$。

首先压缩 $w_T$ 的分布。对于 $T\ne0$,设其最低的非零位为 $h$。将 $[0,R)$ 按 $R$ 的二进制位拆成对齐的块:大小超过 $2^h$ 的块内正负抵消,其余块内符号相同或相反。因此,记 $r_h=R\bmod2^h$,有

$$ v_h=\begin{cases} 2^h-r_h,&R\text{ 的第 }h\text{ 位为 }1,\\ r_h,&R\text{ 的第 }h\text{ 位为 }0. \end{cases} $$

当 $h<a_m$ 时,更高位中至少有一个 $R$ 的非零位,使得 $w_T=\pm v_h$ 各占一半;计入 $2^{-L}$ 后,两者的权重均为 $2^{-h-2}$。当 $h=a_m$ 时只有一个 $T$,其值为 $2^{a_m}-\sum_{i<m}2^{a_i}$,权重为 $2^{-L}$;另外 $T=0$ 对应 $w_T=R$,权重同样为 $2^{-L}$。

在相邻的非零位之间,$v_h$ 不变,权重可以用等比数列求和。因此只需保留 $O(m)$ 对数值与权重 $(w_i,\lambda_i)$,无需枚举全部位。所有数值和权重均可直接在模意义下计算。

接下来令

$$ P(u)=[t^n]E(t)\mathrm e^{uJ(t)} =\sum_{j=0}^n p_ju^j,\qquad p_j=\frac1{j!}[t^n]E(t)J(t)^j. $$

因为 $J(0)=0$,这些系数可以用一次二元 Bostan–Mori,从

$$ [t^n]\frac{E(t)}{1-uJ(t)} $$

中批量提取,再逐项除以 $j!$。这里不要求 $J$ 的一次项非零,因此也允许 $b_1=0$。另一方面,带权幂和 $s_j=\sum_i\lambda_iw_i^j$ 的生成函数为

$$ \sum_{j\ge0}s_jz^j=\sum_i\frac{\lambda_i}{1-w_iz}. $$

用分治合并分式,再求逆展开到 $z^n$,即可得到 $s_0,\dots,s_n$。最终答案为 $\sum_{j=0}^n p_js_j$。

使用普通乘积树合并分式,上述实现的总复杂度为 $O\bigl(m\log(a_m+2)+(n+m)\log^2(n+m)\bigr)$;前一项来自计算稀疏二进制位对应的模幂。系数 $b_k$ 可以任意给定,不要求非零项稀疏。

连续段长度受限的排列计数

简要题意

称排列中位置连续且值域连续的一段为连续段。给定 $1\le m<n\le10^5$,计数不存在长度为 $m+1,\dots,n-1$ 的连续段的 $n$ 元排列,答案模 $998244353$。

相关题目:洛谷 P7278 纯洁憧憬、牛客比赛 38727 的 I 题、QOJ 4822 Matrix Counting,三题都是我出的,但出后两题时只做到了 $O(n\log^2 n/\log\log n)$。

简要题解

先用析合树把组合部分化简。记

$$ P(x)=\sum_{j\ge1}j!x^j,\qquad H(x)=\sum_{j=1}^m j!x^j, $$

并令 $S(x)$ 为长度至少为 $4$ 的单排列的 OGF。按照根为叶子、合点、析点分类,有

$$ P=x+\frac{2P^2}{1+P}+S(P), $$

故令 $Y=P^{\langle-1\rangle}(H)$,便有

$$ S(H)=H-\frac{2H^2}{1+H}-Y. $$

根为析点时,所有真连续段都包含在某个儿子中,故只需限制每个儿子的大小不超过 $m$,贡献就是 $[x^n]S(H)$。

根为合点时,按固定方向的直和不可分块唯一拆分。每块的 OGF 为 $I=P/(1+P)$,相邻若干整块的并也是连续段。因而条件等价于首尾两块的大小均至少为 $n-m$,每块的大小均不超过 $m$。令

$$ J(x)=\sum_{j=n-m}^m[x^j]I(x)\,x^j, $$

则这部分的贡献为 $2[x^n](1+P)J^2$:中间任意多块的 OGF 为 $1/(1-I)=1+P$;首尾的下界已保证中间总大小至多为 $2m-n<m$,因此不必再截断中间部分。于是答案为

$$ \boxed{[x^n]\left(H-\frac{2H^2}{1+H}-Y+2(1+P)J^2\right).} $$

组合部分也可参见原比赛题解。剩下的关键是用 $O(n\log n)$ 计算 $Y$,而不是真的先求复合逆再复合。

由阶乘的递推,$P$ 满足

$$ x^2P'(x)+(x-1)P(x)+x=0. $$

将 $P(Y)=H$ 代入,利用 $P'(Y)Y'=H'$,得到

$$ \Phi(Y):=Y^2H'+\bigl((1+H)Y-H\bigr)Y'=0. $$

对这个方程做 Newton 迭代。设当前近似为 $y$,修正量为 $h$,则需求解

$$ Bh'+Ch=-\Phi(y),\qquad B=(1+H)y-H,\quad C=2yH'+(1+H)y'. $$

从 $y=x+([x^2]H-2)x^2$ 开始,始终有 $B=-x^2+O(x^3)$、$C=1+O(x)$。除以单位 $B/x^2$ 后,归结为

$$ x^2h'+a(x)h=r(x),\qquad a(0)\ne0. $$

直接套积分因子会出现 $\exp(c/x)$,无法在形式 Laurent 级数中运算。但只需消去 $a$ 的二次及以上部分:写成

$$ a=a_0+a_1x+x^2q(x),\qquad U=\exp\left(-\int q(x)\,\mathrm dx\right),\qquad h=Uz, $$

原方程就变为

$$ x^2z'+(a_0+a_1x)z=r/U. $$

记 $s=r/U$,比较系数得到

$$ z_k=\frac{s_k-(a_1+k-1)z_{k-1}}{a_0},\qquad z_{-1}=0. $$

这部分可以线性递推,前后的多项式求逆、指数与乘法都是 $O(M(n))$,所以一次线性化方程的求解只需 $O(M(n))$。

最后检查精度:若 $y-Y=O(x^k)$,则 $h=O(x^k)$,更新后的非线性余项为

$$ \Phi(y+h)-\Phi(y)-Bh'-Ch =H'h^2+(1+H)hh'=O(x^{2k-1}). $$

线性算子保持最低非零项的次数,故精度从 $k$ 提升到 $2k-1$。按 $3,5,9,17,\dots$ 倍增,总复杂度为 $O(M(n))=O(n\log n)$。其余组合部分只涉及常数次求逆和乘法,整个问题同样是 $O(n\log n)$。

同时求出所有长度的答案

如果固定 $m$,要求同时计算 $n=m+1,\dots,N$ 的答案,析点部分只需将 $Y$ 和相应的有理式一次算到 $x^N$,复杂度仍为 $O(N\log N)$。合点部分的截断下界随 $n$ 变化,需要另外处理。

记 $I_j=[x^j]I(x)$,并暂时去掉正反两个方向的系数 $2$,令

$$ C_n=[x^n](1+P)\left(\sum_{j=n-m}^m I_jx^j\right)^2. $$

当 $n>2m$ 时 $C_n=0$。对于 $m<n\le2m$,令 $t=2m-n$、$a_i=I_{m-i}$($0\le i<m$),展开可得

$$ C_{2m-t}=\sum_{\substack{0\le i,j\le t\\i+j\ge t}}a_i a_j(i+j-t)!. $$

令 $k=i+j-t$,条件恰好变成 $0\le k\le\min(i,j)$。因此定义后缀平方和

$$ T(x)=\sum_{k=0}^{m-1}k!x^k \left(\sum_{i=k}^{m-1}a_i x^{i-k}\right)^2, $$

就有 $C_{2m-t}=[x^t]T(x)$,只需求出 $T\bmod x^m$。

这个式子可以分治计算。考虑指标都在 $[l,r)$ 内的三元组 $(k,i,j)$,其贡献为 $k!a_i a_jx^{i+j-k}$,且 $k\le i,j$。令中点为 $b$,全部位于同一半的三元组递归处理;跨越中点时,必有 $k<b$,并且至少一个端点在右半。

具体地,设

$$ R(x)=\sum_{i=b}^{r-1}a_i x^{i-b},\qquad W(x)=\sum_{k=l}^{b-1}k!x^{b-1-k},\qquad F(x)=\sum_{s=0}^{b-l-1}\left(\sum_{k=l}^{b-1-s}k!a_{k+s}\right)x^s. $$

$F$ 可由左半序列与反转后的阶乘序列卷积得到。一个端点在右半、另一个在左半时,贡献为 $2x^bR(x)F(x)$;两个端点都在右半时,贡献为 $x^{b+1}R(x)^2W(x)$。每层只需常数次卷积,故这部分的复杂度为 $O(M(m)\log m)=O(m\log^2m)$。

最后对每个 $n$ 输出 $[x^n]S(H)+2C_n$。总复杂度为

$$ \boxed{O(N\log N+m\log^2m),} $$

循环群自由积中的有限阶字计数

简要题意

给定 $m$ 种字符,第 $i$ 种恰有 $n_i$ 个,每个字符可以选择 $c_i$ 种颜色。允许删除连续的 $d_i$ 个同种同色字符。给定正整数 $k$,求有多少个字符串 $S$,使得将它重复拼接 $k$ 次得到的 $S^k$ 可以消为空串。答案模 $998244353$。

$1\le n_i,d_i\le10^8$、$1\le c_i<998244353$,且 $\sum_i\lceil n_i/d_i\rceil\le2\cdot10^5$。

相关题目:CF2223F Zhily and Colorful Strings,只要求 $S$ 消为空串,即 $k=1$。

简要题解

以下组合部分(由 GPT)在抽象代数语言下解释,出题时笔者从原来的形式得到了一样的结论,但没有得到最后的算法。

给第 $i$ 种字符的第 $j$ 种颜色分配一个生成元 $a_{i,j}$,考虑群

$$ \Gamma=\mathop{*}_{i=1}^m\mathop{*}_{j=1}^{c_i}C_{d_i} =\left\langle a_{i,j}\mid a_{i,j}^{d_i}=1\right\rangle. $$

这里 $*$ 表示自由积,不要求不同生成元交换。每个字符串是这些生成元组成的一个正字,空串对应单位元。相邻的同一生成元合并指数,再将指数对 $d_i$ 取模,就是自由积的正规形归约。因此,字符串能消为空,当且仅当它代表单位元。题目计数的是具有指定各类字母数的字,而不是不同的群元素。

原始条件便是

$$ [S]^k=1\quad\text{于 }\Gamma. $$

自由积的有限阶元素都共轭于某个因子中的元素。这里可以直接看出:将一个元素共轭化为循环约化的正规形,若其音节数至少为 $2$,则首尾来自不同因子,重复拼接不会约去任何音节,因而不可能有有限阶。所以除了单位元,只需考虑

$$ [S]=v a_{p,j}^{r_p}v^{-1},\qquad 1\le r_p<d_p,\qquad d_p\mid kr_p. $$

要求 $v$ 的最后一个音节不来自 $\langle a_{p,j}\rangle$,便得到唯一的这种共轭正规形。其阶为 $d_p/\gcd(d_p,r_p)$。

写 $n_i=b_id_i+r_i$,其中 $0\le r_i<d_i$。将群映到 $\prod_i C_{d_i}$,令同一种字符的所有颜色映到同一个生成元,可以看出:至多允许一个 $r_p>0$;若存在这样的 $p$,还必须有 $d_p\mid kr_p$。若所有 $r_i=0$,满足要求的字只能代表单位元。以下分别计数这两种情况。

单位元的字。 自由积的 Cayley 图由各生成元对应的有向 $d_i$ 边形连接而成,不同边形之间具有树状结构。将闭路按首次返回分解:以颜色 $(i,j)$ 出发的一次首次返回,需要沿对应的边形走满 $d_i$ 步,在中间的 $d_i-1$ 个顶点处插入若干次闭路;这些闭路不能以同一个生成元出发,否则应当继续沿当前边形前进,而不是另开一次返回。这也给出了正规形栈所确定的唯一嵌套结构。$d_i=1$ 时,对应一条自环,没有内部插槽。

每走满一个第 $i$ 类边形消耗 $d_i$ 个字符。先提出颜色因子 $\mathbf c^{\mathbf b}=\prod_i c_i^{b_i}$,记 $q_i=1/c_i$,令 $F_i(\mathbf x)$ 记录根为第 $i$ 类首次返回的结构,其权为各边形独立选色后符合限制的概率。父子同类时颜色相同的概率为 $q_i$,故

$$ F_i=\frac{x_i}{(1-\sum_jF_j+q_iF_i)^{d_i-1}} =x_iG_i(\mathbf F),\qquad G_i(\mathbf x)=\frac1{(1-\sum_jx_j+q_ix_i)^{d_i-1}}. $$

任意闭路是首次返回的有序序列,所以令

$$ H(\mathbf x)=\frac1{1-\sum_i x_i}, $$

所求为 $\mathbf c^{\mathbf b}[\mathbf x^{\mathbf b}]H(\mathbf F)$。由多元 Lagrange 反演,

$$ [\mathbf x^{\mathbf b}]H(\mathbf F) =[\mathbf x^{\mathbf b}]H(\mathbf x)\mathbf G(\mathbf x)^{\mathbf b} \det\left([i=j]-\frac{x_j}{G_i}\frac{\partial G_i}{\partial x_j}\right). $$

令 $t_i=x_i/(1-\sum_jx_j)$,将公共的 $1-\sum_jx_j$ 因子提出,得到

$$ [\mathbf x^{\mathbf b}] \frac{P(\mathbf t)}{(1-\sum_jx_j)^{1+\sum_i b_i(d_i-1)}}. $$

这里 $P$ 包含 $\mathbf G^{\mathbf b}$ 中剩余的因子和行列式。该行列式是对角矩阵减去秩一矩阵,因此

$$ \begin{aligned} P(\mathbf t) &=\prod_i\frac1{(1+q_it_i)^{b_i(d_i-1)+1}} \det\left([i=j](1+d_iq_it_i)-(d_i-1)t_j\right)\\ &=\left(1-\sum_i\frac{(d_i-1)t_i}{1+d_iq_it_i}\right) \prod_i\frac{1+d_iq_it_i}{(1+q_it_i)^{b_i(d_i-1)+1}}\\ &=[u^1](1+u)\prod_i \frac{1+d_iq_it_i-(d_i-1)ut_i}{(1+q_it_i)^{b_i(d_i-1)+1}}. \end{aligned} $$

记 $K=\sum_i b_i$、$N=\sum_i n_i$。$P$ 中单项式 $\mathbf t^{\mathbf e}$ 对应的系数提取为

$$ [\mathbf x^{\mathbf b-\mathbf e}] (1-\sum_i x_i)^{-1-N+K-\sum_i e_i} =\frac{N!}{(N-K+\sum_i e_i)!}\prod_i\frac1{(b_i-e_i)!}. $$

因此只需用 $w$ 记录 $\sum_i e_i$,定义

$$ \operatorname{Poly}_i(w,u)=\sum_{e=0}^{b_i}\frac{w^e}{(b_i-e)!} [t_i^e]\frac{1+d_iq_it_i-(d_i-1)ut_i}{(1+q_it_i)^{b_i(d_i-1)+1}}, $$

则单位元部分的答案为

$$ \boxed{\mathbf c^{\mathbf b}\sum_{s=0}^K \frac{N!}{(N-K+s)!}[w^s u^1](1+u)\prod_i\operatorname{Poly}_i(w,u).} $$

非平凡有限阶元素的字。 接下来设恰有一个 $r_p>0$,且 $d_p\mid kr_p$。这时需要计数共轭于 $a_{p,j}^{r_p}$ 的字,并枚举核心颜色 $j$。

沿共轭正规形 $v a_{p,j}^{r_p}v^{-1}$ 看,一个第 $i$ 类音节 $a_{i,j}^s$ 与逆音节 $a_{i,j}^{d_i-s}$ 配对,合计消耗 $d_i$ 个字符,并有 $d_i-1$ 种选择 $s$ 的方式。于是整个结构是一条共轭链,最内层是 $r_p$ 个核心字符,各处附着前面计数的闭路。

暂记 $A_i=1-\sum_jF_j+q_iF_i$。每层除去通向下一层的插槽,还需计入返回后的闭路,其权为

$$ \frac{(d_i-1)x_i}{A_i^{d_i}} =\frac{(d_i-1)F_i}{A_i}. $$

共轭正规形要求相邻音节不属于同一个循环因子,最内层音节也不能属于核心因子。对加权序列禁止相邻同色,可用连续同色段的容斥:若第 $i$ 类一层的权为 $L_i$,便将它替换为 $L_i/(1+q_iL_i)$;若末端还禁止指定的第 $p$ 类颜色,再乘 $1/(1+q_pL_p)$。这里仅禁止同种且同色,同种不同色仍属于不同的自由因子。

代入 $L_i=(d_i-1)F_i/A_i$,再补上链开始前的任意闭路和核心处的 $r_p$ 个插槽,得到归一化生成函数

$$ \frac1{1-\sum_iF_i} \frac1{1-\sum_i\frac{(d_i-1)F_i}{1-\sum_jF_j+q_id_iF_i}} \frac1{1+\frac{q_p(d_p-1)F_p}{A_p}} \frac1{A_p^{r_p}}. $$

最终还需乘 $c_p\mathbf c^{\mathbf b}$,其中 $c_p$ 来自核心的颜色选择。对上式同样做多元 Lagrange 反演,所得系数形如

$$ [\mathbf x^{\mathbf b}] \frac{Q(\mathbf t)}{(1-\sum_jx_j)^{1+\sum_i b_i(d_i-1)+r_p}}, $$

其中

$$ Q(\mathbf t)= \frac{P(\mathbf t)} {\left(1-\sum_i\frac{(d_i-1)t_i}{1+q_id_it_i}\right) (1+q_pd_pt_p)(1+q_pt_p)^{r_p-1}}. $$

此处共轭链贡献的分母,恰好与 $P$ 的秩一行列式因子约去,核心对应的 $1+d_pq_pt_p$ 也被约去。因此实际上

$$ \boxed{Q(\mathbf t)= \frac1{(1+q_pt_p)^{b_p(d_p-1)+r_p}} \prod_{i\ne p}\frac{1+d_iq_it_i}{(1+q_it_i)^{b_i(d_i-1)+1}}.} $$

这比单位元情形还简单,已经完全分离变量,不需要增加新的形式元。将右侧第 $i$ 个单变量因子记作 $Q_i(t_i)$,令

$$ \operatorname{Poly}_i(w)=\sum_{e=0}^{b_i} \frac{w^e}{(b_i-e)!}[t_i^e]Q_i(t_i), $$

即可得到原始 idea 中非平凡有限阶元素部分的答案

$$ \boxed{c_p\mathbf c^{\mathbf b}\sum_{s=0}^K \frac{N!}{(N-K+s)!}[w^s]\prod_i\operatorname{Poly}_i(w).} $$

两种情况的每个单变量因子都可用二项式展开在线性时间内构造,再分治相乘。单位元情形只需保留 $u$ 的零次、一次项,故总复杂度均为 $O(K\log^2(K+2)+m\log 998244353)$,后一项用于颜色的求逆、幂运算;非平凡核心情形也允许 $K=0$,此时答案就是 $c_p$。

注意 $N$ 可能超过模数,式中的阶乘比值应理解为长度为 $K-s$ 的下降阶乘

$$ \frac{N!}{(N-K+s)!}=\prod_{j=N-K+s+1}^{N}j, $$

不能直接对大阶乘求逆。所有 $s$ 的值可倒序递推;真正需要求逆的阶乘下标只有 $0,\dots,K$。这样,$k$ 的作用仅是判断核心元素的阶是否整除它,并不会放大多项式的规模。

Public Round #1 题解

By alpha1022
  • 搬题人:
    • A:cdw。
    • B:hehezhou。
    • C:cdw, Qingyu。
  • 组题人:p_b_p_b。
  • 题解:cdw, hehezhou, p_b_p_b。

删数

题目来源:International Zhautykov Olympiad 2022, Computer Science, Day 1, Problem 1.

QOJ 链接:https://qoj.ac/problem/3575

官方题解:https://qoj.ac/files/tutorials/IZhO2022/IZhO-draft.pdf

考虑差分数组 $d_i$,操作即为将相邻相同的数合并为它们的 2 倍。

按照符号 和 $d_i/\text{lowbit}(d_i)$ 分段分别做,不妨设 $d_i$ 均为 $2$ 的幂次,$f_i$ 表示考虑前 $i$ 个数时的答案,递推预处理出 $g_{i,j}$ 表示以 $i$ 为右端点合并出 $2^j$ 时的左端点即可递推计算 $f_i$,这样的 $j$ 仅有 $\mathcal O(\log V)$ 个,时间复杂度 $\mathcal O(n\log V)$,期望得分 $100$。

守卫

题目来源:2021-2022 ICPC North America Championships. Problem I.

QOJ 链接:https://qoj.ac/problem/1825

官方题解:https://qoj.ac/files/tutorials/NAC2021/TheKingsGuards.m4v

算法 1

考虑输入的边集如果是一个森林。

将合法条件拆成两个:

  1. 任一连通块不能没有守卫。
  2. 任一连通块不能有两个守卫。

首先证明:除非无解,否则不考虑第二个条件,答案不变:

反证法,如果一个连通块内有多个守卫,那么只保留一个,其余守卫暂时进入未部署状态。

对于每个未部署的守卫 $v$,由于这组数据有解,根据二分图匹配的性质,一定存在一条增广路如下:$v\rightarrow x_0\Rightarrow v_0\rightarrow x_1\Rightarrow v_1\rightarrow \cdots\rightarrow x_{k-1}\Rightarrow v_{k-1}\rightarrow x_k$,其中 $v_0,\ldots,v_{k-1}$ 表示守卫,$x_0,\ldots,x_k$ 表示村庄,且村庄 $x_k$ 无人入驻,$v\rightarrow x$ 表示 $v$ 可以入驻 $x$,$x\Rightarrow v$ 表示 $v$ 当前入驻 $x$。进行类似二分图的增广操作,即可使得村庄 $x_k$ 变为入驻状态。

此时,村庄 $x_k$ 所在连通块会有两个守卫,简单的删除两个守卫之间的某条边即可,代价不变大。

因此,我们只需要考虑第一个条件,求出的解如果不合法则输出 -1。

仍然考虑贪心,从大到小逐条尝试删边,用二分图匹配判断是否存在合法方案。

这么做是对的,仍然考虑反证:

考虑最大的边,如果删去这条边后无解,这条边必须被保留,但是可以合并两端的点并认为删去这条边。

否则删去这条边后有解,若最优解中保留了这条边,那么:

将假设的最优解称为最优解,删去这条边后找到的解称为合法解,由上面的证明,最优解每个连通块至多包含一个守卫。

在最优解中删去这条边,得到一个不包含守卫的连通块。

若合法解中,这个点集没有守卫,则这个点集一定向外连了至少一条边,连上这条边,总代价变小。

否则这个点集有守卫并且这个守卫被派往了别的村庄,那么将这个守卫派往合法解所在村庄,则多出了一个不包含守卫的连通块,对于这个连通块,重复这两步讨论。

由此可以构建出一个连通块序列 $C_1,C_2,\cdots,C_k$ ,其中 $C_1$ 是我们讨论的第一个不包含守卫的连通块,而对于每个 $1\le i < k$ ,$C_i$ 从 $C_{i+1}$ 抢了一个守卫。到了 $C_k$ 时,会发现其中的守卫在 $C_1,\cdots,C_{k-1}$ 已经用过了,因此 $C_k$ 必然在合法解中存在一条向外连的边,把这条边连上即可。

算法 2

对于一张图,只保留它的最小生成森林后,答案不变。

这是因为,如果最优解中包含了一条不在最小生成森林上的边,删去这条边。

如果形成了一个不包含守卫的连通块,由于最小生成森林不改变连通性,这个连通块对应的点集在最小生成森林中一定向外连边,加上这条边后,方案仍然合法。并且由于最小生成森林的性质:每条非树边的权值大于对于树上路径所有边的权值,加入的边权一定不大于删除的边权,方案不劣。

因此求出最小生成森林后,从大到小逐条尝试删除即可。

为了降低复杂度,可以维护出当前每个连通块对应的某个守卫,而让剩下的守卫为未入驻状态,初始时对于每个连通块尝试增广,删去一条边判断是否有解时,只需从没有守卫的连通块开始尝试增广即可。

由于每个守卫有 $O(n)$ 个可以入驻的位置,所以单次尝试复杂度 $O(n^2)$ 。

总复杂度 $O(m\log m+n^3)$,分别为最小生成森林的复杂度和尝试删边的复杂度。期望得分 $100$。

算法 3

考虑所有守卫的位置已经确定时应当如何删边。

容易想到自底向上树形 DP :设 $dp_{x,0/1}$ 表示考虑了 $x$ 的子树,并且此时 $x$ 所在的连通块没有/有守卫,能删去的边的最大权值之和。

虽然这个树形 DP 只能解决 $|S_i|=1$ 的部分分,但是受其启发可以得到描述删边的方法:对于每个守卫,它都需要向祖先方向匹配一条边,使得所有守卫匹配的路径没有交点,并最大化被匹配的边权值之和。

这个模型很容易用费用流来描述:

  • 源点向每个守卫连容量为 $1$ 费用为 $0$ 的边。
  • 每个守卫向其可以被派遣去的点连容量为 $1$ 费用为 $0$ 的边。
  • 每个点拆成入点和出点,所有连向它的边连到入点,所有连出去的边连到出点,入点向出点连容量为 $1$ 费用为 $0$ 的边。
  • 每个点的出点向汇点连容量为 $1$ 费用为“它到父亲的边权”的边。
  • 特别地,根向汇点连容量为 $1$ 费用为 $\infty$ 的边。

在这个图上跑最大费用最大流即可。期望得分 $100$。

直线

题目来源:Romanian Master in Informatics 2020, Day 2, Task "Nice Lines".

QOJ 链接:https://qoj.ac/problem/151

官方题解:https://qoj.ac/download?type=attachments&id=169&r=0

算法 1

取 $x_0=2\cdot 10^4+1$,$F(t):=f(x_0,t)$ 是关于 $t$ 的下凸的分段一次函数,且求出分段点即可求出直线。

直接分治,若 $F\left(\dfrac{a+b}2\right)=\dfrac{F(a)+F(b)}2$ 则中间没有分段点,否则递归到 $\left[a,\frac{a+b}2\right]$ 和 $\left[\frac{a+b}2,b\right]$ 分别做。

询问次数 $\mathcal O(n\log V)$,常数视实现而定。

算法 2

取 $x_0=10^5$,此时可以将 $t$ 的坐标划分为一些区间使得一段区间至多有一个分段点或一定不存在分段点。

同样考虑分治,先在最左侧和最右侧分别询问 $2$ 次,求出分段函数最左侧和最右侧的一段 $l_1,l_2$,设 $l_1$ 和 $l_2$ 的交点横坐标为 $x_0$,查询 $F(x_0)$,若其确实为 $l_1$ 和 $l_2$ 的交点则唯一分段点即为 $x_0$;否则设 $x_0$ 附近选择分治范围内的不含分段点的区间 $[x_1,x_2]$,取两个点求出这一段直线,递归到 $x_1$ 左侧和 $x_2$ 右侧分别做。

返回值约为 $10^{10}$ 数量级,每次求直线所用 $y_1-y_2$ 约为 $8\cdot 10^4/10^4$ 数量级,所以精度足够。

询问次数 $4n+\mathcal O(1)$,期望得分 $100$。

存在更优的做法,但可能对精度要求更高,需要精细实现。

alpha1022 Avatar

alpha1022