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_{ ...
随机推荐
- Kubernetes-Envoy(一种全新的Ingress实现方式)
Ingress 在讲Envoy之前,先介绍一下Kubernetes中Service的表现形式为IP:Port,及工作在Ingress:TCP/IP层.而对于基于HTTP的服务来说,不同的URL地址经常 ...
- 如何打war包
1. 利用jdk里的工具 例如我们要打包的文件在D:\myHome\dist: 运行 cmd: cd D:\myHome\dist 进入D:\myHome\dist 然后输入 D:\myHome\di ...
- struts2官方 中文教程 系列十:Form标签
介绍 在本教程中,我们将探索其他Struts 2表单控件.在前面的教程中,我们介绍了如何使用Struts 2表单(处理表单.表单验证和消息资源文件),我们介绍了如何使用Struts 2 head, f ...
- 第四模块:网络编程进阶&数据库开发 考核实战
1.什么是进程?什么是线程? 什么是协程? 进程:正在进行的一个过程或者说一个任务.而负责执行任务则是cpu. 线程:在传统操作系统中,每个进程有一个地址空间,而且默认就有一个控制线程 协程是一种用 ...
- axios应用
Skip to content Features Business Explore Marketplace Pricing Sign in or Sign up Watch929 St ...
- 复制MySQL数据库A到另外一个MySQL数据库B(仅仅针对innodb数据库引擎)
方案一:(不用太大的变化my.ini文件) copy 原数据库A中的 数据库(database) ib_logfile1 ib_logfile0 ibdata1: 关闭目的数据库B: 备份 ...
- Django笔记 —— 模型高级进阶
最近在学习Django,打算玩玩网页后台方面的东西,因为一直很好奇但却没怎么接触过.Django对我来说是一个全新的内容,思路想来也是全新的,或许并不能写得很明白,所以大家就凑合着看吧- 本篇笔记(其 ...
- Sql面试题之三(难度:简单| 含答案)
Sql面试题之三(难度:简单| 含答案) 答案: .SELECT B.name, B.Depart T.Content FROM B, T WHERE ( T.Content = '税法培训' and ...
- Jmeter非GUI命令参数说明
查看帮助 -h, --help print usage information and exit 查看版本 -v, --version print the version information an ...
- [转]Hibernate入门:批量插入数据
转自:http://blog.csdn.net/xiazdong/article/details/7709068 一般如果要插入100万条数据,则会写如下代码: package org.xiazdon ...