不难想到考虑每个点的贡献,ans=n*sigema(1~n)i C(n-1,i)*(2^C(n-1,2))*i^k

直接套第二类斯特林拆柿子即可。提示:sigema(1~n)i C(n,i)*C(i,j) = C(n,j)*2^(n-j)

  1. #include<cstdio>
  2. #include<iostream>
  3. #include<cstring>
  4. #include<cstdlib>
  5. #include<algorithm>
  6. #include<cmath>
  7. using namespace std;
  8. typedef long long LL;
  9. const int _=1e2;
  10. const int maxK=2e5+_;
  11. const int fbiK=(<<)+_;
  12. const int mod=;
  13. inline int ad(int x,int y){return (x>=mod-y)?(x-mod+y):x+y;}
  14. inline int re(int x,int y){return (x<y)?(x-y+mod):x-y;}
  15. inline int mu(int x,int y){return (LL)x*y%mod;}
  16. inline int qp(int x,int y){int r=;while(y>){if(y&)r=mu(r,x);x=mu(x,x);y/=;}return r;}
  17.  
  18. int fac[maxK],fac_inv[maxK],inv[maxK];
  19. void yu(int K)
  20. {
  21. fac[]=;for(int i=;i<=K;i++)fac[i]=mu(fac[i-],i);
  22. fac_inv[K]=qp(fac[K],mod-);
  23. for(int i=K-;i>=;i--)fac_inv[i]=mu(fac_inv[i+],i+);
  24.  
  25. inv[]=;for(int i=;i<=K;i++)inv[i]=mu(inv[mod%i],mod-mod/i);
  26. }
  27.  
  28. namespace GETS2
  29. {
  30. int Re[*fbiK];
  31. void NTT(int *a,int n,int op)
  32. {
  33. for(int i=;i<n;i++)
  34. if(i<Re[i])swap(a[i],a[Re[i]]);
  35. for(int i=;i<n;i<<=)
  36. {
  37. int gn=qp(,(mod-)/(i<<));
  38. if(op==-)gn=qp(gn,mod-);
  39. for(int j=;j<n;j+=(i<<))
  40. {
  41. int g=;
  42. for(int k=;k<i;k++,g=mu(g,gn))
  43. {
  44. int k1=a[j+k],k2=mu(a[j+k+i],g);
  45. a[j+k]=ad(k1,k2);
  46. a[j+k+i]=re(k1,k2);
  47. }
  48. }
  49. }
  50. if(op==-)
  51. {
  52. int inv=qp(n,mod-);
  53. for(int i=;i<n;i++)a[i]=mu(a[i],inv);
  54. }
  55. }
  56. int n,m,L,A[*fbiK],B[*fbiK],S2K[*fbiK];
  57. void main(int K)
  58. {
  59. m=*K-;for(n=;n<=m;n<<=)L++;
  60. for(int i=;i<n;i++)Re[i]=(Re[i>>]>>)|((i&)<<(L-));
  61.  
  62. for(int i=;i<=K;i++)
  63. {
  64. A[i]=mu((i&)?mod-:,fac_inv[i]);
  65. B[i]=mu(qp(i,K),fac_inv[i]);
  66. }
  67.  
  68. NTT(A,n,),NTT(B,n,);
  69. for(int i=;i<n;i++)S2K[i]=mu(A[i],B[i]);
  70. NTT(S2K,n,-);
  71. }
  72. }
  73. int S2[][];
  74. void QWQ()
  75. {
  76. S2[][]=;
  77. for(int i=;i<=;i++)
  78. for(int j=;j<=i;j++)
  79. S2[i][j]=ad(S2[i-][j-],mu(S2[i-][j],j));
  80. }
  81.  
  82. int main()
  83. {
  84. int n,K;
  85. scanf("%d%d",&n,&K);yu(K);
  86. GETS2::main(K);//QWQ();
  87.  
  88. using namespace GETS2;
  89. int ans=,C=;
  90. for(int j=;j<=K;j++)
  91. {
  92. C=mu(mu(C,n-j),inv[j]);
  93. ans=ad(ans, mu( mu(S2K[j],fac[j]) , mu(C,qp(,n--j)) ) );
  94. }
  95. printf("%d\n", mu( mu(ans,n) , qp(,(LL)(n-)*(n-)/%(mod-)) ) );
  96.  
  97. return ;
  98. }

bzoj5093: [Lydsy1711月赛]图的价值的更多相关文章

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

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

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

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

  3. 【bzoj5093】 [Lydsy1711月赛]图的价值 组合数+斯特林数+NTT

    Description "简单无向图"是指无重边.无自环的无向图(不一定连通). 一个带标号的图的价值定义为每个点度数的k次方的和. 给定n和k,请计算所有n个点的带标号的简单无向 ...

  4. 【bzoj5093】[Lydsy1711月赛]图的价值(NTT+第二类斯特林数)

    题意: 给定\(n\)个点,一个图的价值定义为所有点的度数的\(k\)次方之和. 现在计算所有\(n\)个点的简单无向图的价值之和. 思路: 将式子列出来: \[ \sum_{i=1}^n\sum_{ ...

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

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

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

    定义有向图的价值为图中每一个点的度数的 \(k\) 次方之和. 求:对于 \(n\) 个点的无向图所有可能情况的图的价值之和. 遇到这种题,八成是每个点单独算贡献,然后累加起来. 我们可以枚举一个点的 ...

  7. bzoj5093:[Lydsy1711月赛]图的价值

    题目 首先考虑到这是一张有标号的图,每一个点的地位是相等的,因此我们只需要求出一个点的价值和乘上\(n\)就好了 考虑一个点有多少种情况下度数为\(i\) 显然我们可以让除了这个点的剩下的\(n-1\ ...

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

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

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

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

随机推荐

  1. su、sudo、sudo su、sudo -i的用法和区别

    sudo : 暂时切换到超级用户模式以执行超级用户权限,提示输入密码时该密码为当前用户的密码,而不是超级账户的密码.不过有时间限制,Ubuntu默认为一次时长15分钟.su : 切换到某某用户模式,提 ...

  2. Kali Linux 2.0安装光盘分享

    Kali Linux 2.0安装光盘分享 watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I ...

  3. Java中对象、对象引用、堆、栈、值传递以及引用传递的详解

    Java中对象.对象引用.堆.栈.值传递以及引用传递的详解 1.对象和对象引用的差别: (1).对象: 万物皆对象.对象是类的实例. 在Java中new是用来在堆上创建对象用的. 一个对象能够被多个引 ...

  4. AutoCAD2004启动时出现fail to get CommcntrController的怎么办

    解决AutoCAD2004启动时出现fail to get CommcntrController的问题! 2009-02-01 18:06 以前安装AutoCAD2004的时候可以用正常使用,后来又装 ...

  5. javascript获取星期

    入门: var week = new Date().getDaty(); var ary = new Array("日","一","二",& ...

  6. hive分区(partition)简介

    一.背景 1.在Hive Select查询中一般会扫描整个表内容,会消耗很多时间做没必要的工作.有时候只需要扫描表中关心的一部分数据,因此建表时引入了partition概念. 2.分区表指的是在创建表 ...

  7. 还需要学习的十二种CSS选择器

    在前面的文章中,我们在介绍了<五种你必须彻底了解的CSS选择器>,现在向大家介绍,还需要学习的另外十二种CSS选择器.如果你还没有用过,就好好学习一下,如果你已经熟知了就当是温习. 一.X ...

  8. Java中的线程池ExecutorService

    示例 import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.u ...

  9. java 匿名类和匿名方法

    package com.test; interface product{ int getPrice(); } public class News { /** * @param args */ publ ...

  10. 解决mysql数据库乱码问题

    MySQL的SQL语言是用于访问数据库的最常用标准化语言.MySQL软件采用了双授权政策,它分为社区版和商业版,由于其体积小.速 度快.总体拥有成本低,尤其是开放源码这一特点,一般中小型网站的开发都选 ...