bzoj 5093 [Lydsy1711月赛]图的价值 NTT+第二类斯特林数
[Lydsy1711月赛]图的价值
Time Limit: 30 Sec Memory Limit: 256 MB
Submit: 245 Solved: 128
[Submit][Status][Discuss]
Description
Input
Output
输出一行一个整数,即答案对998244353取模的结果。
Sample Input
Sample Output
HINT
Source


因为第二类斯特林数m>n的时候为0,所以就优化成,k log k了,主要就是计算第二类斯特林数,后面组合那里因为最多k
所以就是n-k+1项的反过来乘就可以处理了,然后还有ksm一下。
#include<cstring>
#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cmath> #define ll long long
#define mod 998244353
#define G 3
#define N 200007
using namespace std;
inline int read()
{
int x=,f=;char ch=getchar();
while(!isdigit(ch)){if(ch=='-')f=-;ch=getchar();}
while(isdigit(ch)){x=(x<<)+(x<<)+ch-'';ch=getchar();}
return x*f;
} int n,k,num,L,ans,inv;
int jc[N],jcf[N],ny[N];
int a[N<<],b[N<<],rev[N<<]; int ksm(int a,ll b)
{
int ans=;
while(b)
{
if (b&) ans=(ll)ans*a%mod;
a=(ll)a*a%mod;
b>>=;
}
return ans;
}
void init()
{
jc[]=jcf[]=ny[]=;
for (int i=;i<=k;i++)
jc[i]=(ll)jc[i-]*i%mod,ny[i]=ksm(i,mod-),ny[i]=(ll)ny[i]*ny[i-]%mod;
for (int i=;i<=k;i++)
a[i]=1ll*((i&)?(-):)*ny[i],b[i]=(ll)ksm(i,k)*ny[i]%mod;
for (int i=;i<=k;i++) jcf[i]=(ll)jcf[i-]*(n-i+)%mod;
for (num=;num<=k*;num<<=,L++);if (L) L--;
inv=ksm(num,mod-);
for (int i=;i<num;i++)
rev[i]=(rev[i>>]>>)|((i&)<<L);
}
void NTT(int *a,int flag)
{
for (int i=;i<num;i++)
if (i<rev[i]) swap(a[i],a[rev[i]]);
for (int i=;i<num;i<<=)
{
int wn=ksm(G,(mod-)/(i<<));
for (int j=;j<num;j+=(i<<))
{
int w=;
for (int k=;k<i;w=(ll)w*wn%mod,k++)
{
int x=a[j+k],y=(ll)w*a[j+k+i]%mod;
a[j+k]=(x+y)%mod,a[j+k+i]=(x-y<)?x-y+mod:x-y;
}
}
}
if (flag==-)
{
for (int i=;i<num/;i++) swap(a[i],a[num-i]);
for (int i=;i<num;i++) a[i]=(ll)a[i]*inv%mod;
}
}
int main()
{
n=read(),k=read(),n--;
init();
NTT(a,),NTT(b,);
for (int i=;i<num;i++)
a[i]=(ll)a[i]*b[i]%mod;
NTT(a,-);
for (int i=;i<=min(n,k);i++)
(ans+=(ll)a[i]*jc[i]%mod*ksm(,n-i)%mod*jcf[i]%mod*ny[i]%mod)%=mod;
ans=(ll)ans*(n+)%mod*ksm(,(ll)(n-)*n/)%mod;
printf("%d\n",ans);
}
bzoj 5093 [Lydsy1711月赛]图的价值 NTT+第二类斯特林数的更多相关文章
- BZOJ5093 [Lydsy1711月赛]图的价值 【第二类斯特林数 + NTT】
题目链接 BZOJ5093 题解 点之间是没有区别的,所以我们可以计算出一个点的所有贡献,然后乘上\(n\) 一个点可能向剩余的\(n - 1\)个点连边,那么就有 \[ans = 2^{{n - 1 ...
- BZOJ.5093.[Lydsy1711月赛]图的价值(NTT 斯特林数)
题目链接 对于单独一个点,我们枚举它的度数(有多少条边)来计算它的贡献:\[\sum_{i=0}^{n-1}i^kC_{n-1}^i2^{\frac{(n-2)(n-1)}{2}}\] 每个点是一样的 ...
- 【BZOJ5093】图的价值(第二类斯特林数,组合数学,NTT)
[BZOJ5093]图的价值(第二类斯特林数,组合数学,NTT) 题面 BZOJ 题解 单独考虑每一个点的贡献: 因为不知道它连了几条边,所以枚举一下 \[\sum_{i=0}^{n-1}C_{n-1 ...
- BZOJ 5093: [Lydsy1711月赛]图的价值 第二类斯特林数+NTT
定义有向图的价值为图中每一个点的度数的 \(k\) 次方之和. 求:对于 \(n\) 个点的无向图所有可能情况的图的价值之和. 遇到这种题,八成是每个点单独算贡献,然后累加起来. 我们可以枚举一个点的 ...
- BZOJ 5093: [Lydsy1711月赛]图的价值
第二类斯特林数模版题 需要一些组合数的小$ trick$ upd:这里更新了本题巧妙的$ O(k)$做法,虽然常数很大就是了 传送门:here 题意:求所有$ n$个节点的无重边自环图的价值和,定义一 ...
- bzoj5093:图的价值(第二类斯特林数+NTT)
传送门 首先,题目所求为\[n\times 2^{C_{n-1}^2}\sum_{i=0}^{n-1}C_{n-1}^ii^k\] 即对于每个点\(i\),枚举它的度数,然后计算方案.因为有\(n\) ...
- bzoj 5093 [Lydsy1711月赛]图的价值——第二类斯特林数
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=5093 不要见到组合数就拆! 枚举每个点的度数,则答案为 \( n*\sum\limits_{ ...
- BZOJ 5093[Lydsy1711月赛]图的价值 线性做法
博主曾更过一篇复杂度为$O( k· \log k)$的多项式做法在这里 惊闻本题有$ O(k)$的神仙做法,说起神仙我就想起了于是就去学习了一波 幂与第二类斯特林数 推导看这里 $$ x^k=\sum ...
- 【bzoj5093】[Lydsy1711月赛]图的价值(NTT+第二类斯特林数)
题意: 给定\(n\)个点,一个图的价值定义为所有点的度数的\(k\)次方之和. 现在计算所有\(n\)个点的简单无向图的价值之和. 思路: 将式子列出来: \[ \sum_{i=1}^n\sum_{ ...
随机推荐
- 学会了 python 的pip方法安装第三方库
超级开心啊!!!!!!!!!!!!! win10 打开cmd Installing with get-pip.py To install pip, securely download get-pip. ...
- C语言实现计算二进制数字1的个数
#include<stdio.h> #include<stdlib.h> int print_one_bits01(unsigned int value){ //0000 11 ...
- 分布式redis一些小结
本文围绕以下几点进行阐述: 为什么使用 Redis 使用 Redis 有什么缺点 单线程的 Redis 为什么这么快 Redis 的数据类型,以及每种数据类型的使用场景 Redis 的过期策略以及内存 ...
- WPF 构建无外观(Lookless)控件
原文:WPF 构建无外观(Lookless)控件 构建一个用户可以使用Template属性设置外观的WPF控件需要以下几步 1.继承自System.Windows.Controls.Control 2 ...
- kill -9 vs killall
kill Linux中的kill命令用来终止指定的进程(terminate a process)的运行,是Linux下进程管理的常用命令.通常,终止一个前台进程可以使用Ctrl+C键,但是,对于一个后 ...
- Windows2008新建域时Administrator 帐户密码不符合要求
Windows 2008 系统安装完毕后,(环境:在安装的时间,系统没有设置密码.做好系统后,进入制面板添加了密码或按ctrl + alt + del 设置密码后 在服务器管理-角色 ...
- 通过repcached实现memcached主从复制
一.环境 服务器A:ubuntu server 12.04(192.168.1.111) 服务器B:ubuntu server 12.04 (47.50.13.111) 二.memcached安装 s ...
- 「暑期训练」「Brute Force」 Restoring Painting (CFR353D2B)
题意 给定一定条件,问符合的矩阵有几种. 分析 见了鬼了,这破题谁加的brute force的标签,素质极差.因为范围是1e5,那你平方(枚举算法)的复杂度必然爆. 然后你就会思考其中奥妙无穷的数学规 ...
- 第三篇 Python执行方式和变量初始
第一个Python程序 可以打开notepad或者其他文本编辑器,输入:print("Hello Python!"),将文件保存到任意盘符下,后缀名是 .py 两种python程 ...
- CSS3 : transform 与 transform-origin 属性可以使元素样式发生转变
CSS3 : transform 用于元素样式的转变,比如使元素发生位移.角度变化.拉伸缩小.按指定角度歪斜 transform结合transition可实现各类动画效果 transform : tr ...