题目描述

n个点的无向图,每条边都可能存在,一个图的权值是连通块个数的m次方,求所有可能的图的权值和,答案对998244353取模。

数据范围

T≤1000,n≤30000,m≤15T \le 1000,n \le 30000,m \le 15T≤1000,n≤30000,m≤15

题解

设 hn,ih_{n,i}hn,i​ 表示 nnn 个点的图有 iii 个连通块的方案数,答案可以写成∑k=1nhn,kkm\sum_{k=1}^nh_{n,k}k^mk=1∑n​hn,k​km
化式子,得 ∑k=1nhn,k∑i=1m{im}(ik)i!\sum_{k=1}^nh_{n,k}\sum_{i=1}^m\{_i^m\}(_i^k)i!k=1∑n​hn,k​i=1∑m​{im​}(ik​)i!
其中 {im}\{_i^m\}{im​} 代表第二类斯特林数。将 iii 提前,得∑i=1m{im}i!∑k=1nhn,k(ik)\sum_{i=1}^m\{_i^m\}i!\sum_{k=1}^nh_{n,k}(_i^k)i=1∑m​{im​}i!k=1∑n​hn,k​(ik​)
设 fn,i=∑k=1nhn,k(ik)f_{n,i}=\sum_{k=1}^nh_{n,k}(_i^k)fn,i​=∑k=1n​hn,k​(ik​) , 则上述式子为∑i=1m{im}i!fn,i\sum_{i=1}^m\{_i^m\}i!f_{n,i}i=1∑m​{im​}i!fn,i​
接着我们化简 fn,if_{n,i}fn,i​ , 可以枚举编号为1的点所在的连通块大小,我们预处理 gig_igi​ 表示i个点的图是连通的的方案数,这个就是城市规划那题要求的,我们可以得到fn,i=∑k=1n(ik)∑j=1n−k+1(j−1n−1)gjhn−j,k−1f_{n,i}=\sum_{k=1}^n(_i^k)\sum_{j=1}^{n-k+1}(_{j-1}^{n-1})g_jh_{n-j,k-1}fn,i​=k=1∑n​(ik​)j=1∑n−k+1​(j−1n−1​)gj​hn−j,k−1​
由组合数的递推式得fn,i=∑j=1n(j−1n−1)gj∑k=1n−j+1((i−1k−1)+(ik−1))hn−j,k−1f_{n,i}=\sum_{j=1}^n(_{j-1}^{n-1})g_j\sum_{k=1}^{n-j+1}((_{i-1}^{k-1})+(_i^{k-1}))h_{n-j,k-1}fn,i​=j=1∑n​(j−1n−1​)gj​k=1∑n−j+1​((i−1k−1​)+(ik−1​))hn−j,k−1​
用 kkk 取代 k−1k-1k−1 ,得fn,i=∑j=1n(j−1n−1)gj(fn−j,i−1+fn−j,i)f_{n,i}=\sum_{j=1}^n(_{j-1}^{n-1})g_j(f_{n-j,i-1}+f_{n-j,i})fn,i​=j=1∑n​(j−1n−1​)gj​(fn−j,i−1​+fn−j,i​)
于是我们可以得到fi,n=(n−1)!∑j=1ngj(j−1)!fi−1,n−j(n−j)!+gj(j−1)!fi,n−j(n−j)!f_{i,n}=(n-1)!\sum_{j=1}^n\frac{g_j}{(j-1)!}\frac{f_{i-1,n-j}}{(n-j)!}+\frac{g_j}{(j-1)!}\frac{f_{i,n-j}}{(n-j)!}fi,n​=(n−1)!j=1∑n​(j−1)!gj​​(n−j)!fi−1,n−j​​+(j−1)!gj​​(n−j)!fi,n−j​​
于是我们就可以分治 NttNttNtt 求出 fi(x)f_i(x)fi​(x) 效率: O(nlog2n)O(nlog^2n)O(nlog2n)

代码

#include <bits/stdc++.h>
using namespace std;
const int M=16,P=998244353,N=30001,Z=N<<2;
int ans,T,n,m,s[M][M],jc[N],ny[N],g[Z],b[Z],c[Z],d[Z],A[Z],B[Z],f[M][N],t,p,G[2]={3,(P+1)/3},r[Z];
int X(int x){if (x>=P) x-=P;return x;}
int K(int x,int y){int A=1;for (;y;y>>=1,x=1ll*x*x%P)if (y&1) A=1ll*A*x%P;return A;
}
void Ntt(int *g,bool o){for (int i=0;i<t;i++)if (i<r[i]) swap(g[i],g[r[i]]);for (int wn,i=1;i<t;i<<=1){wn=K(G[o],(P-1)/(i<<1));for (int x,y,j=0;j<t;j+=(i<<1))for (int w=1,k=0;k<i;k++,w=1ll*w*wn%P)x=g[j+k],y=1ll*w*g[i+j+k]%P,g[j+k]=X(x+y),g[i+j+k]=X(x-y+P);}if (o)for (int i=0,v=K(t,P-2);i<t;i++)g[i]=1ll*v*g[i]%P;
}
void pre(int l){for (t=1,p=0;t<l;t<<=1,p++);for (int i=0;i<t;i++)r[i]=(r[i>>1]>>1)|((i&1)<<(p-1));
}
void getinv(int *a,int *b,int l){if (l==1){b[0]=K(a[0],P-2);return;}getinv(a,b,(l+1)>>1);for (int i=0;i<l;i++)A[i]=a[i],B[i]=b[i];pre(l+l);Ntt(A,0);Ntt(B,0);for (int i=0;i<t;i++)A[i]=1ll*A[i]*B[i]%P*B[i]%P;Ntt(A,1);for (int i=0;i<l;i++)b[i]=X(X(b[i]+b[i])-A[i]+P);for (int i=0;i<t;i++) A[i]=B[i]=0;
}
void solve(int *a,int l,int r){if (l==r){a[l]=X(a[l]+d[l]);if (l) a[l]=1ll*a[l]*jc[l-1]%P;return;}int mid=(l+r)>>1;solve(a,l,mid);for (int i=0;i<=mid-l;i++) b[i]=1ll*a[l+i]*ny[l+i]%P;for (int i=0;i<r-l;i++) c[i]=1ll*g[i+1]*ny[i]%P;pre(mid-l+1+r-l);Ntt(b,0);Ntt(c,0);for (int i=0;i<t;i++) b[i]=1ll*b[i]*c[i]%P;Ntt(b,1);for (int i=mid+1;i<=r;i++) a[i]=X(a[i]+b[i-l-1]);for (int i=0;i<t;i++) b[i]=c[i]=0;solve(a,mid+1,r);
}
int main(){s[0][0]=1;for (int i=1;i<M;i++)for (int j=1;j<=i;j++)s[i][j]=(s[i-1][j-1]+1ll*s[i-1][j]*j%P)%P;jc[0]=1;for (int i=1;i<N;i++) jc[i]=1ll*i*jc[i-1]%P;ny[N-1]=K(jc[N-1],P-2);for (int i=N-1;i;i--) ny[i-1]=1ll*i*ny[i]%P;for (int i=0;i<N;i++)g[i]=1ll*K(2,(1ll*i*(i-1)/2)%(P-1))*ny[i]%P;getinv(g,b,N);for (int i=0;i<N;i++)g[i]=1ll*K(2,(1ll*i*(i-1)/2)%(P-1))*ny[i-1]%P;pre(N+N);Ntt(g,0);Ntt(b,0);for (int i=0;i<t;i++) g[i]=1ll*g[i]*b[i]%P,b[i]=0;Ntt(g,1);for (int i=1;i<N;i++) g[i]=1ll*g[i]*jc[i-1]%P;for (int i=0;i<M;i++){if (!i){d[0]=g[0]=1;goto out;}for (int j=1;j<N;j++)b[j]=1ll*g[j]*ny[j-1]%P,c[N-j-1]=1ll*f[i-1][N-j-1]*ny[N-j-1]%P;pre(N+N);Ntt(b,0),Ntt(c,0);for (int j=0;j<t;j++)d[j]=1ll*b[j]*c[j]%P,b[j]=c[j]=0;Ntt(d,1);out:;solve(f[i],0,N-1);}for (scanf("%d",&T);T--;){scanf("%d%d",&n,&m);ans=0;for (int i=1;i<=m;i++)ans=X(ans+1ll*s[m][i]*f[i][n]%P*jc[i]%P);printf("%d\n",ans);}return 0;
}

#2708. 黑暗(dark)相关推荐

  1. Vue2要不要升级到Vue3?(尤雨溪回复解读)

    作者:掘金干货君 https://juejin.cn/post/7117525259212816414 就在前两天,一篇反对Vue2升级到Vue3的文章在vue官方社区引起了热议.(原文链接:Vue ...

  2. 八年级英语上册单词复习

    八年级英语上册单词复习 王学志 复习记录 ## 开始复习 unit 1 ## 开始复习 unit 2 ## 开始复习 unit 3 ## 开始复习 unit 4 ## 开始复习 unit 5 ## 开 ...

  3. AI 绘画Stable Diffusion 研究(五)sd文生图功能详解(下)

    大家好,我是风雨无阻. 上一篇文章详细介绍了sd文生图的功能及使用注意事项,感兴趣的朋友可以前往查看:AI 绘画Stable Diffusion 研究(四)sd文生图功能详解(上) . 那今天这篇文章 ...

  4. 英语二课文语法Uint2B

    Uint2B 阅读理解 课文 课文单词变形 课文 词性判别 语法 总结 阅读理解 found 建立,创立 cotton 棉花 ironig 熨衣服 meet the needs 满足需求 meet f ...

  5. 前端例程20221102:黑暗模式(Dark Mode)

    文章目录 演示 原理 代码 更多补充 prefers-color-scheme filter和mix-blend-mode Darkmode.Js 更多例程 演示 原理 使用CSS自定义属性来定义页面 ...

  6. linux 网卡天启与关闭,在Gnome Shell中切换到黑暗模式(Dark Mode)的方法

    Gnome Shell具有内置的黑暗主题,允许用户更改桌面,文件管理器和所有与Gnome相关的窗口和应用程序的外观,使其看起来更加适合夜间使用并且易于使用,这个主题不需要安装,已经在Gnome的几个版 ...

  7. windows dark mode window黑暗模式 暗黑 浏览器 hight contrast

    好用,浏览器插件暗黑模式不好用,win 键输入高对比模式,或者high contrast(对比). 还有一种就真正的暗黑模式.个性化colors: 下面是high contrast:

  8. YOLO窥见黑夜|YOLO in the Dark让黑夜里的目标检测成为可能

    点击上方"3D视觉工坊",选择"星标" 干货第一时间送达 对于处理新的视觉任务,则需要额外的数据集,这需要花费大量精力.本文提出了一种域自适应的新方法,该方法可 ...

  9. Science:亚硝酸盐氧化细菌在黑暗海洋中的主要作用

    文章目录 亚硝酸盐氧化细菌在黑暗海洋中的主要作用 写在前面 摘要 热心肠日报 背景 结果 图1 非全长16S rRNA基因序列的系统发育树 图2 通过募集宏基因组片段的方法确定亚硝酸盐氧化细菌单扩增基 ...

最新文章

  1. 微星网卡linux驱动,微星中国
  2. linux kafka离线安装,centos 离线安装confluent_kafka 模块
  3. 【HDU - 1301】Jungle Roads(并查集+最小生成树)(内附最小生成树两种算法 克鲁斯特尔算法amp;amp;普里姆算法)
  4. 鸿蒙系统-手机-HAP开发编译调试
  5. java在线学习系统源码_java学习成长之路(基础,源码,项目,实战)
  6. 源码编译构建安装内核kernel
  7. 【wordpress】wordpress环境的搭建
  8. getUpdateCount成员函数不能返回正确数量
  9. modbus调试工具 linux,Modbus测试工具 :Modbus Poll,Modbus Slave
  10. 软件项目管理 问答题
  11. c语言tc2.0编译器下载,c语言tc2.0下载
  12. 高斯列主元消去法matlab,高斯列主元消去法解线性方程组的实现
  13. qt geomery的单位是什么_生命吗哪QT灵修11月28日
  14. python 余弦值_余弦相似度
  15. 招银网络科技Java社招面经
  16. jvm 内存查看与分析工具
  17. java课设超市收银系统_基于jsp的超市收银系统-JavaEE实现超市收银系统 - java项目源码...
  18. 我参加NVIDIA Sky Hackathon(语音识别模型训练)
  19. linux禁用用户账号,linux 如何禁用账号和解除禁用账号
  20. 狗屎一样的面试官,你遇到过几个?

热门文章

  1. php img本地图片路径,php 替换文章中的图片路径,下载图片到本地服务器的方法
  2. Linux内核(十五)sysrq 详解 I —— 使用手册
  3. 微信如何关闭城市服务定位服务器,位置定位微信(怎么悄悄的查对方位置)
  4. 图解TCP/IP之半双工全双工通信
  5. 低频能不能采到高频?采样定理指导硬件设计
  6. 5.Numpy数组中数据的抽取
  7. 一年365天,每周5个工作日,进步1%,两个休息日退步1%,最终进步到多少
  8. 数据库的学习MySQL
  9. 小程序流量主广告赚钱
  10. PHP Laravel 队列技巧:Fail、Retry 或者 Delay