博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[xsy2289]B
阅读量:6469 次
发布时间:2019-06-23

本文共 1017 字,大约阅读时间需要 3 分钟。

题意:给一棵树,一次操作定义为删掉一条树边再加一条边,并且满足加完边后这还是一棵树,问在进行不超过$k$次操作后能构造出多少种不同的树

首先...矩阵树定理在边有边权的时候同样适用,这时可以把它看成重边,此时直接按原方法求得的是所有生成树的边权乘积之和

所以我们可以把这棵树补成一个完全图,令补上去的边边权为$x$,那么答案就是求出来的多项式的$0\cdots k$次系数之和

直接带着多项式做当然不行,所以我们就用单位根作为$x$,求值后IDFT回去即可

我的代码在$k=n-1$时会错...?

#include
#include
#include
using namespace std;typedef long long ll;const int mod=998244353;int mul(int a,int b){return a*(ll)b%mod;}int ad(int a,int b){return(a+b)%mod;}int de(int a,int b){return(a-b)%mod;}int pow(int a,int b){ int s=1; while(b){ if(b&1)s=mul(s,a); a=mul(a,a); b>>=1; } return s;}int rev[64],N,iN;void pre(int n){ int i,k; for(N=1,k=0;N<=n;N<<=1)k++; for(i=0;i
>1]>>1)|((i&1)<<(k-1)); iN=pow(N,mod-2);}void ntt(int*a,int on){ int i,j,k,t,w,wn; for(i=0;i
>1;k++){ t=mul(w,a[i/2+j+k]); a[i/2+j+k]=de(a[j+k],t); a[j+k]=ad(a[j+k],t); w=mul(w,wn); } } } if(on==-1){ for(i=0;i

转载于:https://www.cnblogs.com/jefflyy/p/9451605.html

你可能感兴趣的文章
JBoss7 发布外部目录
查看>>
vSphere5.1安装记录_vCenter 5.1安装
查看>>
debian下LAMP+nginx代理+awstats+nagios+cacti(二)
查看>>
干货满满:小团队(网站&APP)没有数据方面的预算,推广运营人员如何用数据提升业务?...
查看>>
经典台词
查看>>
实战讲解.htaccess文件rewrite规则
查看>>
我的友情链接
查看>>
2003年4月全国计算机等级考试二级C语言笔试试题及答案
查看>>
python2 to python3
查看>>
我的友情链接
查看>>
我的友情链接
查看>>
web常用的Filter业务功能
查看>>
java 读取文件路径空格和中文的处理
查看>>
Linux系统-小倒腾之Linux DIY定制裁剪(附带简单网络功能)o_o(一)
查看>>
linux shell数据重定向(输入重定向与输出重定向)详细分析
查看>>
apache 正向代理反向代理
查看>>
Microsoft Office 2013 各国语言包下载
查看>>
相对布局日志
查看>>
Linux下高效数据恢复软件extundelete应用实战
查看>>
我的友情链接
查看>>