【XSY1301】原题的价值 第二类斯特林数 NTT
题目描述
给你\(n,m\),求所有\(n\)个点的简单无向图中每个点度数的\(m\)次方的和。
\(n\leq {10}^9,m\leq {10}^5\)
题解
\(g_n\)为\(n\)个点的无向图个数,\(f_n\)为\(n\)个点的答案。
g_n&=2^{\binom{n}{2}}\\
f_n&=ng_{n-1}\sum_{i=0}^{n-1}\binom{n-1}{i}i^m\\
&=ng_{n-1}\sum_{i=0}^{n-1}\binom{n-1}{i}\sum_{j=0}^{i}\binom{i}{j}S(m,j)j!\\
&=ng_{n-1}\sum_{i=0}^{n-1}\sum_{j=0}^i\binom{n-1}{i}\binom{i}{j}S(m,j)j!\\
&=ng_{n-1}\sum_{i=0}^{n-1}\sum_{j=0}^i\binom{n-j}{j}\binom{n-1-i}{i-j}S(m,j)j!\\
&=ng_{n-1}\sum_{j=0}^m\binom{n-1}{j}S(m,j)j!\sum_{i=j}^{n-1}\binom{n-1-j}{i-j}\\
&=ng_{n-1}\sum_{j=0}^m{(n-1)}^\underline{j}S(m,j)2^{n-1-j}\\
\end{align}
\]
用ntt算斯特林数
时间复杂度:\(O(m\log m)\)
代码
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cstdlib>
#include<ctime>
#include<utility>
using namespace std;
typedef long long ll;
typedef pair<int,int> pii;
ll p=998244353;
ll fp(ll a,ll b)
{
ll s=1;
while(b)
{
if(b&1)
s=s*a%p;
a=a*a%p;
b>>=1;
}
return s;
}
ll fc[300010];
ll ifc[300010];
ll a[300010];
ll b[300010];
int rev[300010];
void ntt(ll *a,int n,int t)
{
ll u,v,w,wn;
int i,j,k;
rev[0]=0;
for(i=1;i<n;i++)
rev[i]=(rev[i>>1]>>1)|(i&1?n>>1:0);
for(i=0;i<n;i++)
if(rev[i]<i)
swap(a[rev[i]],a[i]);
for(i=2;i<=n;i<<=1)
{
if(t==1)
wn=fp(3,(p-1)/i);
else
wn=fp(fp(3,(p-1)/i),p-2);
for(j=0;j<n;j+=i)
{
w=1;
for(k=j;k<j+i/2;k++)
{
u=a[k];
v=a[k+i/2]*w%p;
a[k]=(u+v)%p;
a[k+i/2]=(u-v)%p;
w=w*wn%p;
}
}
}
if(t==-1)
{
ll inv=fp(n,p-2);
for(i=0;i<n;i++)
a[i]=a[i]*inv%p;
}
}
ll c[300010];
int main()
{
// freopen("b.in","r",stdin);
// freopen("b.out","w",stdout);
int n,m;
scanf("%d%d",&n,&m);
fc[0]=fc[1]=ifc[0]=ifc[1]=1;
int i;
int t=min(n-1,m);
for(i=2;i<=t;i++)
{
fc[i]=fc[i-1]*i%p;
ifc[i]=ifc[i-1]*fp(i,p-2)%p;
}
for(i=0;i<=t;i++)
{
a[i]=(i&1?-1:1)*ifc[i];
b[i]=fp(i,m)*ifc[i]%p;
}
int k=1;
while(k<=2*t)
k<<=1;
ntt(a,k,1);
ntt(b,k,1);
for(i=0;i<k;i++)
a[i]=a[i]*b[i]%p;
ntt(a,k,-1);
for(i=0;i<k;i++)
a[i]=(a[i]%p+p)%p;
ll ans=0;
c[0]=1;
for(i=1;i<=t;i++)
c[i]=c[i-1]*(n-i)%p;
for(i=0;i<=t;i++)
ans=(ans+c[i]%p*a[i]%p*fp(2,n-1-i)%p)%p;
ans=ans*n%p*fp(2,ll(n-1)*(n-2)/2%(p-1))%p;
printf("%lld\n",ans);
return 0;
}
【XSY1301】原题的价值 第二类斯特林数 NTT的更多相关文章
- BZOJ 5093: [Lydsy1711月赛]图的价值 第二类斯特林数+NTT
定义有向图的价值为图中每一个点的度数的 \(k\) 次方之和. 求:对于 \(n\) 个点的无向图所有可能情况的图的价值之和. 遇到这种题,八成是每个点单独算贡献,然后累加起来. 我们可以枚举一个点的 ...
- bzoj 5093 图的价值 —— 第二类斯特林数+NTT
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=5093 每个点都是等价的,从点的贡献来看,得到式子: \( ans = n * \sum\li ...
- BZOJ5093 [Lydsy1711月赛]图的价值 【第二类斯特林数 + NTT】
题目链接 BZOJ5093 题解 点之间是没有区别的,所以我们可以计算出一个点的所有贡献,然后乘上\(n\) 一个点可能向剩余的\(n - 1\)个点连边,那么就有 \[ans = 2^{{n - 1 ...
- bzoj5093:图的价值(第二类斯特林数+NTT)
传送门 首先,题目所求为\[n\times 2^{C_{n-1}^2}\sum_{i=0}^{n-1}C_{n-1}^ii^k\] 即对于每个点\(i\),枚举它的度数,然后计算方案.因为有\(n\) ...
- 【BZOJ4555】【TJOI2016】【HEOI2016】求和 (第二类斯特林数+NTT卷积)
Description 在2016年,佳媛姐姐刚刚学习了第二类斯特林数,非常开心. 现在他想计算这样一个函数的值: $$f(n)=\sum_{i=0}^n\sum_{j=0}^i S(i,j)\tim ...
- P4091 [HEOI2016/TJOI2016]求和(第二类斯特林数+NTT)
传送门 首先,因为在\(j>i\)的时候有\(S(i,j)=0\),所以原式可以写成\[Ans=\sum_{i=0}^n\sum_{j=0}^nS(i,j)\times 2^j\times j! ...
- BZOJ4555 [Tjoi2016&Heoi2016]求和 【第二类斯特林数 + NTT】
题目 在2016年,佳媛姐姐刚刚学习了第二类斯特林数,非常开心. 现在他想计算这样一个函数的值: S(i, j)表示第二类斯特林数,递推公式为: S(i, j) = j ∗ S(i − 1, j) + ...
- bzoj 4555 [Tjoi2016&Heoi2016] 求和 —— 第二类斯特林数+NTT
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=4555 关于第二类斯特林数:https://www.cnblogs.com/Wuweizhen ...
- BZOJ 4555:[TJOI2016&HEOI2016]求和(第二类斯特林数+NTT)
题目链接 \(Description\) 求 \[\sum_{i=0}^n\sum_{j=0}^iS(i,j)2^jj!\]对998244353取模后的结果. \(n<=10^5\) \(Sol ...
随机推荐
- python 跨域处理方式
因为浏览器的同源策略限制,不是同源的脚本不能操作其他源下面的资源,想操作另一个源下面的资源就属于跨域了,这里说的跨域是广义跨域,我们常说的代码中请求跨域,是狭义的跨域,即在脚本代码中向非同源域发送ht ...
- Makefile有三个非常有用的变量。分别是$@,$^,$
原文地址:https://blog.csdn.net/u013774102/article/details/79043559 假设我们有下面这样的一个程序,源代码如下: /* main.c */ #i ...
- 11076: 小P的集合 位运算
考虑当只有一个数出现奇数次的时候,我们可以很轻松的知道,把所有的数异或和即可,因为异或运算有一个非常有意思的性质,a^b^a=b 考虑当有两个数(a,b)出现奇数次的时候,我们异或和得到,num=a^ ...
- UVA-10375 唯一分解定理
#include<iostream> #include<string.h> #include<algorithm> #include<math.h> # ...
- 安装SQL Server时,提示VS Shell 安装失败,退出代码为 1638。
在安装SQL Server时,提示“安装 Microsoft Visual C++ 2015 Redistributable 时出错VS Shell 安装失败,退出代码为 1638”. 原因:是由于你 ...
- WinForm 进度条
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; usin ...
- Django之用户上传文件的参数配置
Django之用户上传文件的参数配置 models.py文件 class Xxoo(models.Model): title = models.CharField(max_length=128) # ...
- rest framwork 小试身手
models.py from django.db import models class Course(models.Model): """ 课程表 "&quo ...
- 【Python3练习题 012】 输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。
ASCII 码表的对应值,知道 ord('a') 能将字符 'a' 转化为 ASCII 码表上对应的数值,就可以了.其中,数字 0-9 对应的码值为 48-57,大写字母 A-Z 对应 65-90,小 ...
- Linux df 与du用法
df 查看一级目录的大小,但是不能查看文件的大小.du 可以查看目录或者文件大小. 1 df的基本用法 df命令可以显示目前所有文件系统的总空间及当前可用空间,用法如下: -a 全部文件系统列表-h ...