题面

显然只需要考虑一个点(再乘n),那么枚举这个点的度数,另外的$\frac{(n-1)(n-2)}{2}$条边是随意连的,而这个点连出去的边又和其余$n-1$个点产生组合,所以答案就是

$n*\frac{(n-1)(n-2)}{2}*\sum\limits_{i=0}^{n-1}C_{n-1}^i i^k$

运用第二类斯特林数和自然数幂的关系展开$i^k$,然后发现后面那一坨只要算到$min(n-1,k)$就可以了(再往后斯特林数就成零了)

于是问题变成了快速求一行第二类斯特林数,多项式卷积即可

  1. #include<cmath>
  2. #include<cstdio>
  3. #include<cctype>
  4. #include<cstring>
  5. #include<algorithm>
  6. using namespace std;
  7. const int N=,mod=;
  8. int fac[N],inv[N],rev[N],a[N],b[N];
  9. int n,m,k,G,Gi,C,ans,pw[][];
  10. void Add(int &x,int y)
  11. {
  12. x+=y;
  13. if(x>=mod) x-=mod;
  14. }
  15. int Qpow(int x,int p)
  16. {
  17. if(p==) return ;
  18. if(p==) return x;
  19. int tmp=Qpow(x,p/);
  20. return p%?1ll*tmp*tmp%mod*x%mod:1ll*tmp*tmp%mod;
  21. }
  22. void Prework()
  23. {
  24. register int i;
  25. scanf("%d%d",&n,&k);
  26. fac[]=inv[]=;
  27. for(i=;i<=k;i++) fac[i]=1ll*fac[i-]*i%mod;
  28. inv[k]=Qpow(fac[k],mod-);
  29. for(i=k-;i;i--) inv[i]=1ll*inv[i+]*(i+)%mod;
  30. for(i=;i<=k;i++)
  31. {
  32. a[i]=i%?mod-inv[i]:inv[i];
  33. b[i]=1ll*Qpow(i,k)*inv[i]%mod;
  34. }
  35. m=; while(m<=*k) m<<=;
  36. for(i=;i<=m;i++)
  37. rev[i]=(rev[i>>]>>)+(i&)*(m>>);
  38. G=,Gi=Qpow(G,mod-);
  39. for(int i=;i<=;i++)
  40. {
  41. pw[i][]=Qpow(G,(mod-)/(<<i));
  42. pw[i][]=Qpow(Gi,(mod-)/(<<i));
  43. }
  44. }
  45. void Trans(int *arr,int len,int typ)
  46. {
  47. register int i,j,k;
  48. for(i=;i<len;i++)
  49. if(rev[i]>i) swap(arr[rev[i]],arr[i]);
  50. for(i=;i<=len;i<<=)
  51. {
  52. int lth=i>>,ort=pw[(int)log2(i)][typ==-];
  53. for(j=;j<len;j+=i)
  54. {
  55. int ori=,tmp;
  56. for(k=j;k<j+lth;k++,ori=1ll*ori*ort%mod)
  57. {
  58. tmp=1ll*ori*arr[k+lth]%mod;
  59. arr[k+lth]=(arr[k]-tmp+mod)%mod;
  60. arr[k]=(arr[k]+tmp)%mod;
  61. }
  62. }
  63. }
  64. if(typ==-)
  65. {
  66. int Ni=Qpow(len,mod-);
  67. for(i=;i<=len;i++)
  68. arr[i]=1ll*arr[i]*Ni%mod;
  69. }
  70. }
  71. int main()
  72. {
  73. register int i;
  74. Prework();
  75. Trans(a,m,),Trans(b,m,);
  76. for(i=;i<m;i++) a[i]=1ll*a[i]*b[i]%mod;
  77. Trans(a,m,-),C=; //for(int i=0;i<=m;i++) printf("%d ",a[i]);
  78. // for(int i=1;i<=n;i++) printf("%d %d\n",fac[i],inv[i]);
  79. for(i=;i<=min(n-,k);i++)
  80. {
  81. Add(ans,1ll*a[i]*fac[i]%mod*C%mod*Qpow(,n-i-)%mod);
  82. C=1ll*C*(n-i-)%mod*Qpow(i+,mod-)%mod;
  83. }
  84. int pw=1ll*(n-)*(n-)/%(mod-);
  85. printf("%lld",1ll*ans*n%mod*Qpow(,pw)%mod);
  86. return ;
  87. }

解题:BZOJ 5093 图的价值的更多相关文章

  1. [BZOJ 5093]图的价值

    Description 题库链接 一个带标号的图的价值定义为每个点度数的 \(k\) 次方的和.给定 \(n\) 和 \(k\) ,请计算所有 \(n\) 个点的带标号的简单无向图的价值之和.对 \( ...

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

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

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

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

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

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

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

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

  6. 【BZOJ5093】图的价值(第二类斯特林数,组合数学,NTT)

    [BZOJ5093]图的价值(第二类斯特林数,组合数学,NTT) 题面 BZOJ 题解 单独考虑每一个点的贡献: 因为不知道它连了几条边,所以枚举一下 \[\sum_{i=0}^{n-1}C_{n-1 ...

  7. [CF932E]Team Work & [BZOJ5093]图的价值

    CF题面 题意:求\(\sum_{i=0}^{n}\binom{n}{i}i^k\) \(n\le10^9,k\le5000\) 模\(10^9+7\) BZOJ题面 题意:求\(n*2^{\frac ...

  8. [BZOJ5093]图的价值(NTT+第二类Stirling数)

    5093: [Lydsy1711月赛]图的价值 Time Limit: 30 Sec  Memory Limit: 256 MBSubmit: 250  Solved: 130[Submit][Sta ...

  9. BZOJ5093图的价值(斯特林数)

    题目描述 “简单无向图”是指无重边.无自环的无向图(不一定连通). 一个带标号的图的价值定义为每个点度数的k次方的和. 给定n和k,请计算所有n个点的带标号的简单无向图的价值之和. 因为答案很大,请对 ...

随机推荐

  1. 20155207 《网络对抗技术》EXP3 免杀原理与实践

    20155207 <网络对抗技术>EXP3 免杀原理与实践 基础问题回答 杀软是如何检测出恶意代码的? - 根据特征码进行检测(静态) - 启发式(模糊特征点.行为 ) - 根据行为进行检 ...

  2. Python+Selenium爬取动态加载页面(1)

    注: 最近有一小任务,需要收集水质和水雨信息,找了两个网站:国家地表水水质自动监测实时数据发布系统和全国水雨情网.由于这两个网站的数据都是动态加载出来的,所以我用了Selenium来完成我的数据获取. ...

  3. libgdx学习记录20——多线程MultiThread资源处理

    在libgdx中,一般的逻辑流程都在rende()函数中执行,这个函数是由opengl的渲染线程调用的,一般的图形显示和逻辑处理都在这个线程中. 一般情形下,在这个线程中处理就行了.但是当某些逻辑处理 ...

  4. C#精华面试题及答案 三

    PS.学了两三年的软件开发到头来发现连一些基本的东西都没掌握,通过面试题来检验自己的水平,让学习变得更加有方向性,也为将来择业而打下基础,不至于到时候手忙脚乱. 一.选择,填空题 1. 在ADO.NE ...

  5. linux下的tar命令详解

    通过SSH访问服务器,难免会要用到压缩,解压缩,打包,解包等,这时候tar命令就是是必不可少的一个功能强大的工具.linux中最流行的tar是麻雀虽小,五脏俱全,功能强大. tar命令可以为linux ...

  6. Azure : 通过 SendGrid 发送邮件

    SendGrid 是什么? SendGrid 是架构在云端的电子邮件服务,它能提供基于事务的可靠的电子邮件传递.并且具有可扩充性和实时分析的能力.常见的用例有:1. 自动回复用户的邮件2. 定期发送信 ...

  7. Beyond Compare文本对比中提示编辑禁止的解决方法

    Beyond Compare是一款拥有文本比较功能的智能化软件,它支持在文本比较的同时,直接对差异文本进行修改.删除.编辑等一系列操作,这样一来,节约了文本对比的时间.但是在使用Beyond Comp ...

  8. Java+Netty、Vue+Element-UI实现的即时通信应用 leo-im

    之前工作接触了几个开源的IM产品,再加上曾经用Netty实现过几个服务,于是就有了用Netty实现一个IM的想法,于是用业余时间写了一个IM,和喜欢Netty的程序员们分享. 考虑到方便扩展,在服务端 ...

  9. SPIR-V*:面向 OpenCL™ 工作负载的英特尔® 显卡编译器默认接口

    英特尔® 显卡编译器最近从 SPIR* 转换到 SPIR-V*,作为面向 OpenCL™ 工作负载的中间表示.这看起来像编译器的内部变化,对用户来说不可见,但是这展示了我们支持 Khronos* 开放 ...

  10. 普通程序员看k8s的账户管理

    一.知识准备 ● 账户管理分为:userAccount与serviceAccount ● userAccount:通常是给人设计使用的,并且userAccount不在k8s集群内管理 ● servic ...