码迷,mamicode.com
首页 > 其他好文 > 详细

【AtCoder】AGC005 F - Many Easy Problems 排列组合+NTT

时间:2018-04-16 12:03:04      阅读:230      评论:0      收藏:0      [点我收藏+]

标签:AC   coder   style   大小   排列   test   rac   组合   算法   

【题目】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)。

 

【AtCoder】AGC005 F - Many Easy Problems 排列组合+NTT

标签:AC   coder   style   大小   排列   test   rac   组合   算法   

原文地址:https://www.cnblogs.com/onioncyc/p/8854970.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!