正题

题目链接:https://www.luogu.com.cn/problem/AT2064


题目大意

给出nnn个点的一棵树,对于k∈[1,n]k\in[1,n]k∈[1,n]求出所有kkk个点的点集的构出的虚树大小和。

1≤n≤2×1051\leq n\leq 2\times 10^51≤n≤2×105


解题思路

考虑每个点的贡献,一个点被统计当且仅当存在两个点在它所连接的不同联通块中,那么也就是如果所有选出的点都在它的同一个连通块中那么这个点不会被统计贡献。记为一个联通块大小为mmm,那么这个点的贡献就是(nk)−(mk)\binom{n}{k}-\binom{m}{k}(kn​)−(km​)。

不难发现所有节点连接的联通块数量只有2n−22n-22n−2个,统计cic_ici​表示大小为iii的子树数量,那么答案
ansk=(nk)×n−∑i=kn(ik)×cians_k=\binom{n}{k}\times n-\sum_{i=k}^n\binom{i}{k}\times c_iansk​=(kn​)×n−i=k∑n​(ki​)×ci​
这个东西显然可以写成卷积形式,用NTTNTTNTT就好了。

时间复杂度:O(nlog⁡n)O(n\log n)O(nlogn)


code

#include<cstdio>
#include<cstring>
#include<algorithm>
#define ll long long
using namespace std;
const ll N=1<<19,P=924844033;
struct node{ll to,next;
}a[N<<1];
ll n,tot,ls[N],siz[N],c[N],b[N],inv[N],fac[N],r[N];
void addl(ll x,ll y){a[++tot].to=y;a[tot].next=ls[x];ls[x]=tot;return;
}
void dfs(ll x,ll fa){siz[x]=1;for(ll i=ls[x];i;i=a[i].next){ll y=a[i].to;if(y==fa)continue;dfs(y,x);siz[x]+=siz[y];}if(n-siz[x])c[n-siz[x]]++,c[siz[x]]++;return;
}
ll power(ll x,ll b){ll ans=1;while(b){if(b&1)ans=ans*x%P;x=x*x%P;b>>=1;}return ans;
}
void NTT(ll *f,ll n,ll op){for(ll i=0;i<n;i++)if(i<r[i])swap(f[i],f[r[i]]);for(ll p=2;p<=n;p<<=1){ll len=p>>1,tmp=power(5,(P-1)/p);if(op==-1)tmp=power(tmp,P-2);for(ll k=0;k<n;k+=p){ll buf=1;for(ll i=k;i<k+len;i++){ll tt=f[i+len]*buf%P;f[i+len]=(f[i]-tt+P)%P;f[i]=(f[i]+tt)%P;buf=buf*tmp%P;}}}if(op==-1){ll invn=power(n,P-2);for(ll i=0;i<n;i++)f[i]=f[i]*invn%P;}return;
}
signed main()
{inv[0]=inv[1]=fac[0]=1;for(ll i=2;i<N;i++)inv[i]=P-inv[P%i]*(P/i)%P;for(ll i=1;i<N;i++)fac[i]=fac[i-1]*i%P,inv[i]=inv[i-1]*inv[i]%P;scanf("%lld",&n);for(ll i=1,x,y;i<n;i++){scanf("%lld%lld",&x,&y);addl(x,y);addl(y,x);}dfs(1,0);ll m=1;while(m<=2*n+2)m<<=1;for(ll i=1;i<=n;i++)c[i]=c[i]*fac[i]%P;for(ll i=0;i<=n;i++)b[i]=inv[i];for(ll i=0;i<m;i++)r[i]=(r[i>>1]>>1)|((i&1)?(m>>1):0);reverse(b,b+n+1);NTT(c,m,1);NTT(b,m,1);for(ll i=0;i<m;i++)c[i]=c[i]*b[i]%P;NTT(c,m,-1);for(ll i=1;i<=n;i++){ll w=fac[n]*inv[i]%P*inv[n-i]%P;w=w*n%P-c[n+i]%P*inv[i]%P;printf("%lld\n",(w+P)%P);}return 0;
}

AT2064-[AGC005F]Many Easy Problems【NTT】相关推荐

  1. 牛客挑战赛53G-同源数组(Easy Version)【NTT】

    正题 题目链接:https://ac.nowcoder.com/acm/contest/11193/G 题目大意 给出nnn个长度为mmm的数组,然后你每次可以进行差分(不会改变数组长度那种)和前缀和 ...

  2. 【推导】【NTT】hdu6061 RXD and functions(NTT)

    题意:给定一个n次多项式f(x)的各项系数,让你求f(x-Σai)的各项系数. http://blog.csdn.net/v5zsq/article/details/76780053 推导才是最关键的 ...

  3. P6800-[模板]Chirp Z-Transform【NTT】

    正题 题目链接:https://www.luogu.com.cn/problem/P6800 题目大意 给出一个nnn此多项式PPP,对于k∈[0,m−1]k\in[0,m-1]k∈[0,m−1]所有 ...

  4. CF1251F-Red-White Fence【NTT】

    前言 刚开始看错题推了半天的生成函数 正题 题目链接:https://www.luogu.com.cn/problem/CF1251F 题目大意 nnn个白色木板,kkk个红色木板,给出这些木板的高度 ...

  5. [2020.11.4NOIP模拟赛]简单的打击【NTT】

    正题 题目链接:https://www.luogu.com.cn/problem/U138580 题目大意 两个长度为nnn的序列,要求重排后同位置的相加后众数的个数最多. 解题思路 定义aia_ia ...

  6. jzoj4051-序列统计【NTT】

    正题 题目链接:https://jzoj.net/senior/#contest/show/3017/2 题目大意 求有多少个长度为nnn的序列使得 都是在集合SSS中的数 这些数的乘积%m=x\% ...

  7. HDU 6589 Sequence【NTT】

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6589 AC代码: #include<bits/stdc++.h> using namesp ...

  8. 【NTT】Gym - 101480 - F - Frightful Formula

    题目链接https://codeforces.com/gym/101480/attachments 题意 给出一个矩阵,第一行是数组 t t t,第一列是数组 l l l,其余的值为 F [ i ] ...

  9. 【NTT】 ZOJ 3899 State Reversing

    先找出第二类斯特林数的公式,然后把公式分解成卷积的形式,先做一遍NTT,然后对于每次询问只要用线段树求出有多少个空闲的房间就可以了. #include <bits/stdc++.h> us ...

最新文章

  1. 机器学习四剑客4——PIL
  2. C++_typedef名字
  3. 初识类(classstruct)及C/C++封装的差异
  4. c语言编一个dll 用message box 弹出一个对话框,Qt学习之路(17): Qt标准对话框之QMessageBox...
  5. 基于nginx的tomcat负载均衡和集群(超简单)
  6. linux安装redis并在后台启动
  7. 区块链世界中的IOTA:它是什么样的存在?
  8. id文本框适应文字_Indesign中对同一行文字进行分行缩排的操作方法
  9. 2017GAITC丨尖峰对话:AI的第三次寒冬会不会到来?
  10. Java中的Error和Exceptiond的异同点
  11. python获取当前路径导包_python 通过文件夹导入包的操作
  12. MySQL SQL error: #1271 - Illegal mix of collations for operation 'UNION'
  13. fork、vfork、clone 三者的区别
  14. AVS2音视频编码标准
  15. Mac/Linux 安装ab(Apache Benchmark)
  16. 10-调用门(有参)实验
  17. 太极定二仪,清浊始以形:红黑树的实现和性质
  18. ae显示不能动态链接服务器,ae pr如何联动、建立动态链接?
  19. NDIS拨号流程+dhcp
  20. 如何解决Winfrom加载程序未能加载文件或程序集,抛出异常,

热门文章

  1. 交换系统接媒体服务器,基于软交换的媒体服务器的设计与实现
  2. python生成器yield原理_Python generator生成器和yield表达式详解
  3. 嵌入式linux配置qt,基于qt的嵌入式Linux开发环境搭建
  4. python引用numpy出错_使用numpy时出错
  5. html怎么做交互留言,简单html与servlet交互
  6. 计算机态,(计算机)有限态自动机,FSM(finite state machine),音标,读音,翻译,英文例句,英语词典...
  7. win7 计算器 android,教你巧妙应用Win7计算器和时钟
  8. java class类型参数_使用Class对象实例化Java类型参数/ generic
  9. 万字总结webpack实战案例配置
  10. [C++11]返回值类型后置