专栏文章

远古记忆里的一道模拟赛题

个人记录参与者 4已保存评论 3

文章操作

快速查看文章及其快照的属性,并进行相关操作。

当前评论
3 条
当前快照
1 份
快照标识符
@miny4qo9
此快照首次捕获于
2025/12/02 10:15
3 个月前
此快照最后确认于
2025/12/02 10:15
3 个月前
查看原文
远古记忆里的一道模拟赛题,没记错应该是 djq 老师的场/bx/bx/bx
不知道有没有原,有道题面类似的题 Since A Light 来着。
之前经常想起来经常想不起来怎么做,遂记录。

定义 T0T_0 为一个结点的有根树,TnT_nTn1T_{n-1} 的根节点下面再挂一个 Tn1T_{n-1} 作为子树的树,问 TnT_n 中距离为 dd 的点对数,对 109+710^9+7 取模。
1n1091\le n\le 10^91d1071\le d\le 10^7

f(n,d)f(n,d) 为答案,则跨过两个 Tn1T_{n-1} 间连的边的点对数为 i=0d1(n1i)(n1d1i)\sum\limits_{i=0}^{d-1}\binom{n-1}{i}\binom{n-1}{d-1-i},因为显然 TnT_n 中有 (ni)\binom{n}{i} 个深度为 ii 的点。Vandermonde 卷积可得为 (2n2d1)\binom{2n-2}{d-1},故而 f(n,d)=2f(n1,d)+(2n2d1)f(n,d)=2f(n-1,d)+\binom{2n-2}{d-1},即答案为 i=0n12n1i(2id1)\sum\limits_{i=0}^{n-1}2^{n-1-i}\binom{2i}{d-1}
……额这个 (2id1)\binom{2i}{d-1} 看起来挺难处理的?有没有什么高妙的事情,让复杂度转移到 dd 上?

回到上一步 Vandermonde 卷积之前,我们要找两个 {1,2,,i}\{1,2,\cdots,i\} 的子集大小和为 d=d1d'=d-1枚举其交的大小。设交的大小为 bb,则对称差的大小为 d12bd-1-2b,则有
(2id)=b=0d/22d2b(ib,d2b,id+b)=b=0d/22d2b(dbb)(idb)\dbinom{2i}{d'}=\sum_{b=0}^{\lfloor d'/2\rfloor}2^{d'-2b}\dbinom{i}{b,d'-2b,i-d'+b}=\sum_{b=0}^{\lfloor d'/2\rfloor}2^{d'-2b}\dbinom{d'-b}{b}\dbinom{i}{d'-b}
我们利用枚举一个 O(d)O(d) 的变量的代价使得上指标的 2i2i 变成了 ii!回到原式,答案为
b=0d/22d2b(dbb)i=0n12n1i(idb)\sum_{b=0}^{\lfloor d'/2\rfloor}2^{d'-2b}\dbinom{d'-b}{b}\sum_{i=0}^{n-1}2^{n-1-i}\dbinom{i}{d'-b}
此时关于 ii 的和式便明朗了起来:ii 个里选 dbd-b 个,n1in-1-i 个里面随便选,那么在中间插入一个元素的话,其实就是问 nn 个元素选至少 db+1=dbd'-b+1=d-b 个的方案数——对于每个 dbdd-b\le d,这都可以递推求出:用总共的 2n2^n 再递推地逐一减去少于 dbd-b 个的组合数即可。
本问题解决,时间复杂度 O(d)O(d)

评论

3 条评论,欢迎与作者交流。

正在加载评论...