AtCoderAGC005 F - Many Easy Problems 排列组合+NTT

Posted ONION_CYC

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了AtCoderAGC005 F - Many Easy Problems 排列组合+NTT相关的知识,希望对你有一定的参考价值。

【题目】F - Many Easy Problems

【题意】给定n个点的树,定义S为大小为k的点集,则f(S)为最小的包含点集S的连通块大小,求k=1~n时的所有点集f(S)的和取模924844033。n<=2*10^5。

【算法】排列组合+NTT

【题解】考虑每个点只会在k个点都在其一个子树时无贡献,即:

$$ANS_k=\sum_{x=1}^{n}\binom{n}{k}-\sum_{y}\binom{sz[y]}{k}+\binom{n-sz[y]}{k}$$

令$cnt_i$表示满足sz[x]=i或n-sz[x]=i的数量,那么只需要计算:

$$ans_k=\sum_{i=k}^{n}cnt_i*\binom{i}{k}$$

拆分组合数:

$$k!ans_k=\sum_{i=k}^{n}\frac{cnt_i*i!}{(i-k)!}$$

令:

$$A_x=cnt_x*x!,x\in[1,n]$$

$$B_x=\frac{1}{x!},x\in[1,n]$$

令B‘表示数组B的反转,那么可以写成:

$$C_k=\sum_{i=k}^{n}A_i*B_{i-k}=\sum_{i=k}^{n}A_i*B‘_{n+k+1-i}$$

扩展上下界:

$$D_{n+k+1}=\sum_{i=0}^{n+k+1}A_i*B‘_{n+k+1-i}$$

用NTT处理即可,原根为5。

复杂度O(n log n)。

 

以上是关于AtCoderAGC005 F - Many Easy Problems 排列组合+NTT的主要内容,如果未能解决你的问题,请参考以下文章

AGC005F - Many Easy Problems

AGC005F Many Easy Problems(NTT)

[题解] [AGC005F] Many Easy Problems

Ceph: too many PGs per OSD

AtCoderAGC024

AtCoderAGC016