定义有向图的价值为图中每一个点的度数的 \(k\) 次方之和.

求:对于 \(n\) 个点的无向图所有可能情况的图的价值之和.

遇到这种题,八成是每个点单独算贡献,然后累加起来.

我们可以枚举一个点的度数是多少,然后试着去算该情况下的贡献,即 \(\sum_{i=0}^{n-1}\binom{n-1}{i}i^k\)

由于一共有 \(n\) 个点,而除了我们限定的边之外其余的边都是可以随便连的.

故 \(Ans=n\times 2^{\frac{(n-1)(n-2)}{2}}\times \sum_{i=0}^{n-1}\binom{n-1}{i}i^k\)

前面的好算,关键在于后面的 \(\sum_{i=0}^{n-1}\binom{n-1}{i}i^k\)

考虑将 \(i^k\) 按照第二类斯特林数的方式展开,得 \(\sum_{i=0}^{n-1}\sum_{j=0}^{i}S(k,j)\binom{i}{j}(j!)\)

考虑提前枚举 \(j\),有 \(\sum_{j=0}^{n-1}S(k,j)(j!)\sum_{i=j}^{n-1}\binom{n-1}{i}\binom{i}{j}\)

后面那个 \(\sum_{i=j}^{n-1}\binom{n-1}{i}\binom{i}{j}\) 还可以继续推,将组合数变换一下,有 \(\sum_{i=j}^{n-1}\binom{n-1}{j}\binom{n-1-j}{i-j}\)

\(\Rightarrow \binom{n-1}{j}\sum_{i=j}^{n-1}\binom{n-1-j}{i-j}\)

然后 \(\sum_{i=j}^{n-1}\binom{n-1-j}{i-j}\) 的组合意义是从 \(n-1-j\) 个元素中选择有标号的 \(0,1,2...n-1-j\) 个元素的方案数.

这个直接就可以写成 \(2^{n-1-j}\)

故 \(Ans=n\times 2^{\frac{(n-1)(n-2)}{2}}\sum_{j=0}^{n-1}S(k,j)(j!)\binom{n-1}{j}2^{n-1-j}\)

由于 \(j\leqslant k\) 时斯特林数才有意义,所以我们只需枚举到 \(min(k,n-1)\) 即可.

斯特林数要用 NTT 来预处理.

  1. #include <bits/stdc++.h>
  2. #define LL long long
  3. #define setIO(s) freopen(s".in","r",stdin)
  4. using namespace std;
  5. const int G=3,mod=998244353,N=400005,phi=998244352;
  6. inline int qpow(int x,int y)
  7. {
  8. int tmp=1;
  9. for(;y;y>>=1,x=1ll*x*x%mod) if(y&1) tmp=1ll*tmp*x%mod;
  10. return tmp;
  11. }
  12. inline int INV(int x) { return qpow(x,mod-2); }
  13. inline void NTT(int *a,int len,int flag)
  14. {
  15. int i,j,k,mid;
  16. for(i=k=0;i<len;++i)
  17. {
  18. if(i>k) swap(a[i],a[k]);
  19. for(j=len>>1;(k^=j)<j;j>>=1);
  20. }
  21. for(mid=1;mid<len;mid<<=1)
  22. {
  23. int wn=qpow(G,(mod-1)/(mid<<1));
  24. if(flag==-1) wn=INV(wn);
  25. for(i=0;i<len;i+=mid<<1)
  26. {
  27. int w=1;
  28. for(j=0;j<mid;++j)
  29. {
  30. int x=a[i+j],y=1ll*w*a[i+j+mid]%mod;
  31. a[i+j]=1ll*(x+y)%mod, a[i+j+mid]=1ll*(x-y+mod)%mod;
  32. w=1ll*w*wn%mod;
  33. }
  34. }
  35. }
  36. if(flag==-1)
  37. {
  38. int rev=INV(len);
  39. for(i=0;i<len;++i) a[i]=1ll*a[i]*rev%mod;
  40. }
  41. }
  42. int f[N<<2],g[N<<2],fac[N],inv[N];
  43. void Initialize(int Lim)
  44. {
  45. int i,j,limit;
  46. inv[0]=fac[0]=1;
  47. for(i=1;i<=Lim;++i) fac[i]=1ll*fac[i-1]*i%mod,inv[i]=INV(fac[i]);
  48. for(i=0;i<=Lim;++i)
  49. {
  50. f[i]=inv[i];
  51. if(i&1) f[i]=mod-f[i];
  52. g[i]=1ll*inv[i]*qpow(i,Lim)%mod;
  53. }
  54. for(limit=1;limit<=2*(Lim+1);limit<<=1);
  55. NTT(f,limit,1),NTT(g,limit,1);
  56. for(i=0;i<limit;++i) f[i]=1ll*f[i]*g[i]%mod;
  57. NTT(f,limit,-1);
  58. }
  59. int main()
  60. {
  61. // setIO("input");
  62. int i,j,n,k,ans=0,Lim;
  63. scanf("%d%d",&n,&k),Lim=min(n-1,k);
  64. Initialize(k);
  65. int now=1,tot=n-1;
  66. for(i=0;i<=Lim;++i)
  67. {
  68. int delta=1ll*f[i]*now%mod*qpow(2,n-1-i)%mod;
  69. ans=(ans+delta)%mod;
  70. now=1ll*now*tot%mod;
  71. --tot;
  72. }
  73. ans=1ll*ans*n%mod;
  74. ans=1ll*ans*qpow(2,1ll*(n-1)*(n-2)/2%phi)%mod;
  75. printf("%d\n",ans);
  76. return 0;
  77. }

BZOJ 5093: [Lydsy1711月赛]图的价值 第二类斯特林数+NTT的更多相关文章

  1. bzoj 5093 [Lydsy1711月赛]图的价值——第二类斯特林数

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=5093 不要见到组合数就拆! 枚举每个点的度数,则答案为 \( n*\sum\limits_{ ...

  2. bzoj 5093 图的价值 —— 第二类斯特林数+NTT

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=5093 每个点都是等价的,从点的贡献来看,得到式子: \( ans = n * \sum\li ...

  3. bzoj 5093 [Lydsy1711月赛]图的价值 NTT+第二类斯特林数

    [Lydsy1711月赛]图的价值 Time Limit: 30 Sec  Memory Limit: 256 MBSubmit: 245  Solved: 128[Submit][Status][D ...

  4. BZOJ 5093: [Lydsy1711月赛]图的价值

    第二类斯特林数模版题 需要一些组合数的小$ trick$ upd:这里更新了本题巧妙的$ O(k)$做法,虽然常数很大就是了 传送门:here 题意:求所有$ n$个节点的无重边自环图的价值和,定义一 ...

  5. BZOJ 5093[Lydsy1711月赛]图的价值 线性做法

    博主曾更过一篇复杂度为$O( k· \log k)$的多项式做法在这里 惊闻本题有$ O(k)$的神仙做法,说起神仙我就想起了于是就去学习了一波 幂与第二类斯特林数 推导看这里 $$ x^k=\sum ...

  6. BZOJ.5093.[Lydsy1711月赛]图的价值(NTT 斯特林数)

    题目链接 对于单独一个点,我们枚举它的度数(有多少条边)来计算它的贡献:\[\sum_{i=0}^{n-1}i^kC_{n-1}^i2^{\frac{(n-2)(n-1)}{2}}\] 每个点是一样的 ...

  7. 【XSY1301】原题的价值 第二类斯特林数 NTT

    题目描述 给你\(n,m\),求所有\(n\)个点的简单无向图中每个点度数的\(m\)次方的和. \(n\leq {10}^9,m\leq {10}^5\) 题解 \(g_n\)为\(n\)个点的无向 ...

  8. BZOJ5093 [Lydsy1711月赛]图的价值 【第二类斯特林数 + NTT】

    题目链接 BZOJ5093 题解 点之间是没有区别的,所以我们可以计算出一个点的所有贡献,然后乘上\(n\) 一个点可能向剩余的\(n - 1\)个点连边,那么就有 \[ans = 2^{{n - 1 ...

  9. bzoj5093:图的价值(第二类斯特林数+NTT)

    传送门 首先,题目所求为\[n\times 2^{C_{n-1}^2}\sum_{i=0}^{n-1}C_{n-1}^ii^k\] 即对于每个点\(i\),枚举它的度数,然后计算方案.因为有\(n\) ...

随机推荐

  1. 【Centos】Centos7.5取消自动锁屏功能

    目录 00. 目录 01. 问题描述 02. 问题分析 03. 解决办法 04. 附录 00. 目录 @ 参考博客:[Centos]Centos7.5取消自动锁屏功能 01. 问题描述 Centos7 ...

  2. 解决python中的Non-UTF-8 code starting with ‘\xbs4’ in file错误

    出现错误如下图: 主要原因为编辑python脚本使用的编辑器编码有问题.我使用的编辑器是notepad++,由于没有做Python语言编辑配置,默认使用的是ANSI编码(右下角位置有编码格式),如下: ...

  3. (四)pdf的构成之文件体(树图)

    pdf的文件体类似于一个大树 有个根对象(catalog),该对象中保存着PDF的很多基本信息,并通过间接引用,辐射到所有的间接对象. (下图是大概的树形状)

  4. Kafka 初识

    1.Kafka 是什么? 用一句话概括一下:Apache Kafka 是一款开源的消息引擎系统. 倘若“消息引擎系统“这个词对你来说有点陌生的话,那么“消息队列“.“消息中间件”的提法想必你一定是有所 ...

  5. 物流管理系统(SSM+vue+shiro)【前后台】

    一.简单介绍项目 该项目是属于毕业设计项目之一,有前台的用户下单.有司机进行接单.有管理员进行操作后台,直接进入主题 毕设.定制开发 联系QQ:761273133 登录主页: 手机号码+验证码登录 或 ...

  6. CCF 2016-12-1 最大波动

    CCF 2016-12-1 最大波动 题目 问题描述 小明正在利用股票的波动程度来研究股票.小明拿到了一只股票每天收盘时的价格,他想知道,这只股票连续几天的最大波动值是多少,即在这几天中某天收盘价格与 ...

  7. .NET Core中使用GB2312编码

    原文:.NET Core中使用GB2312编码 .NET Core默认不支持GB2312,如果直接使用Encoding.GetEncoding("GB2312")的时候会抛出异常. ...

  8. text-overflow 全兼容

    text-overflow 全兼容 text-overflow 这个CSS属性用于设置或检索是否使用一个省略标记(...)标示对象内文本的溢出.比起在后台用程序截断文本再附上省略标记的做法,用CSS来 ...

  9. Air for ANE:打包注意的地方

    来源:http://blog.csdn.net/hero82748274/article/details/8631982 今天遇到了一个打包ANE 文件的问题,导致花费了几个小时查找,最后师弟的一句话 ...

  10. Redis持久化小结

    RDB RDB持久化方式是通过快照(snapshotting)完成的,当符合一定条件时,Redis将内存中所有数据以二进制方式生成一份副本并存储在硬盘上. 触发机制 save命令:阻塞当前Redis服 ...