【题解】BZOJ5093图的价值(二项式+NTT)

今天才做这道题,是我太弱了

强烈吐槽c++这种垃圾语言tmd数组越界不re反倒去别的数组里搞事情我只想说QAQ

推了一张A4纸的式子

考虑每个点的度数,因为每个点虽然有标号但是是等价的,对于每个点,对于答案的贡献是\(x\),答案输出\(n\times x\)就好了,所以答案是
\[ n\sum_{i=1}^{n-1} i^{k} {n-1\choose i}2^{\frac {n(n-1)} 2-(n-1)} \]
顺次解释:度数\(^k\),选择\(i\)个别的点去连接,剩下的边随便连

无关项提出来
\[ n2^{\frac {n(n-1)} 2-(n-1)}\sum_{i=1}^{n-1} i^{k} {n-1\choose i} \]
现在就是要求
\[ \sum_{i=1}^{n-1} i^{k} {n-1\choose i} \]
自然幂数和公式
\[ i^k=\sum_{j=0}^{\min\{i,k\}} {k\brace j}\begin{pmatrix} i \\j\end{pmatrix}j! \]
套进去
\[ \sum_{i=1}^{n-1} \sum_{j=0}^{\min\{i,k\}} {k\brace j}\begin{pmatrix} i \\j\end{pmatrix}j! {n-1\choose i} \]
先枚举\(j\)
\[ \sum_{j=0}^{n-1}\sum_{i=j}^{n-1}{k\brace j}j!{n-1\choose i}{i\choose j} \]
整理
\[ \sum_{j=0}^{n-1}{k\brace j}j!\sum_{i=j}^{n-1}{n-1\choose i}{i\choose j} \]
套一下公式(备胎模型)
\[ \sum_{j=0}^{n-1}{k\brace j}j!\sum_{i=j}^{n-1}{n-1-j\choose j}{n-1-j\choose i-j} \]
又可以提出来
\[ \sum_{j=0}^{n-1}{k\brace j}{n-1-j\choose j}j!\sum_{i=j}^{n-1}{n-1-j\choose i-j} \]
稍微改变一下形式
\[ \sum_{j=0}^{n-1}{k\brace j}{n-1-j\choose j}j!\sum_{c=i-j=0}^{c=i-j\le n-1-j}{n-1-j\choose c} \]
二项式定理套
\[ \sum_{j=0}^{n-1}{k\brace j}{n-1-j\choose j}j!2^{n-1-j} \]
我们晓得当\(k > j\)时式子的值\(=0\),所以枚举到\(\min \{n-1,k\}\)就好了。问题在于如何快速求那个斯特林数

斯特林数的容斥式
\[ {k\brace j}=\dfrac 1{j!} \sum_{i=0}^{j-1} (-1)^i{\begin{pmatrix}j\\i\end{pmatrix}}(j-i)^{k} \]
拆拆又是一个NTT的式子,不赘述了,看上面那个链接博客里有

答案式子
\[ n2^{\frac {n(n-1)} 2-(n-1)}\sum_{j=0}^{n-1}{k\brace j}{n-1-j\choose j}j!2^{n-1-j} \]
指数上取膜,又是欧拉定理

写一下NTT就好了

//@winlere
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>using namespace std;  typedef long long ll;
inline int qr(){register int ret=0,f=0;register char c=getchar();while(c<48||c>57)f|=c==45,c=getchar();while(c>=48&&c<=57) ret=ret*10+c-48,c=getchar();return f?-ret:ret;
}namespace poly{const int maxn=1<<19|1;int a[maxn],b[maxn],r[maxn];int savlen;inline void getr(const int&len){if(len==savlen)return;int cnt=0;for(register int t=1;t<len;t<<=1)++cnt;for(register int t=1;t<len;++t)r[t]=r[t>>1]>>1|(t&1)<<cnt>>1;}const int mod=998244353;const int g=3;inline int ksm(int base,int p){register int ret=1;for(base%=mod;p;p>>=1,base=1ll*base*base%mod)if(p&1) ret=1ll*ret*base%mod;return ret;}const int gi=ksm(3,mod-2);inline void NTT(int*a,const int&len,const int&tag){getr(len);for(register int t=1;t<len;++t)if(r[t]>t) swap(a[t],a[r[t]]);int *a1,*a0,s=g;if(tag!=1) s=gi;for(register int t=1,wn;t<len;t<<=1){wn=ksm(s,(mod-1)/(t<<1));for(register int i=0;i<len;i+=t<<1){a1=(a0=a+i)+t;for(register int j=0,w=1,tm;j<t;++j,++a1,++a0,w=1ll*w*wn%mod){tm=1ll**a1*w%mod;*a1=(*a0-tm)%mod;*a0=(*a0+tm)%mod;if(*a1<0)*a1+=mod;}}}if(tag!=1)for(register int t=0,in=ksm(len,mod-2);t<len;++t)a[t]=1ll*a[t]*in%mod;}
}using poly::mod;
using poly::NTT;
using poly::ksm;
const int maxn=2e5+5;
int jc[maxn],inv[maxn];
int t1[1<<19|1];
int s[1<<19|1];
int n,k,L,len;
int ret,ans;inline void pre(){jc[0]=inv[0]=1;for(register int t=1;t<maxn;++t)jc[t]=1ll*jc[t-1]*t%mod;inv[maxn-1]=ksm(jc[maxn-1],mod-2);for(register int t=maxn-2;t;--t){inv[t]=1ll*inv[t+1]*(t+1)%mod;//if(t<15)cout<<"qaq="<<inv[t]<<endl;if(inv[t]==0) return void(cout<<"t="<<t<<endl);}
}inline int c(const int&n,const int&m){if(n<m)return 0;return 1ll*jc[n]*inv[m]%mod*inv[n-m]%mod;
}int main(){pre();n=qr();k=qr();L=min(n-1,k);len=1;while(len<=L)len<<=1;for(register int t=0;t<=L;++t){s[t]=inv[t];if(t&1) s[t]=mod-s[t];t1[t]=1ll*inv[t]*ksm(t,k)%mod;}NTT(t1,len<<1,1);NTT(s,len<<1,1);for(register int t=0;t<len<<1;++t) s[t]=1ll*s[t]*t1[t]%mod;NTT(s,len<<1,-1);for(register int t=k+1;t<len<<1;++t) s[t]=0;int p=(1ll*n*(n-1ll)/2%(mod-1)-n+1+mod-1)%(mod-1);ret=1ll*ksm(2,p)*(n%mod)%mod;int w=1;for(register int t=0;t<=L;++t){ans=(ans+1ll*jc[t]*w%mod*ksm(2,n-1-t)%mod*s[t]%mod)%mod;w=1ll*w*(n-1-t)%mod*inv[t+1]%mod*jc[t]%mod;}cout<<1ll*ret*ans%mod<<endl;return 0;
}

转载于:https://www.cnblogs.com/winlere/p/11190351.html

【题解】BZOJ5093图的价值(二项式+NTT)相关推荐

  1. BZOJ5093 图的价值(NTT+斯特林数)

    显然每个点会提供相同的贡献.于是现在只考虑1号点的贡献.若其度数为i,则在2~n号点选i个连上,剩下的边随便连,这样可以算出答案为 这个式子可以O(n)计算.发现k比较小,于是考虑如何将这个式子化为与 ...

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

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

  3. bzoj5093 图的价值【第二类斯特林数+NTT】

    解题思路: 考虑直接枚举每个点连的边,图中其余点之间随便连,那么直接推式子: ans=n∗2C2n−1∑i=0n−1Cin−1ikans=n*2^{C_{n-1}^2}\sum\limits_{i=0 ...

  4. Bzoj5093: 图的价值

    题面 Bzoj Sol 一张无向无重边自环的图的边数最多为\(\frac{n(n-1)}{2}\) 考虑每个点的贡献 \[n*2^{\frac{n(n-1)}{2} - (n-1)}\sum_{i=0 ...

  5. Team Work(CF 932 E)[bzoj5093][Lydsy1711月赛]图的价值

    0 前言 这是一道小清新题 1 题目相关 1.1传送门 传送门 1.2 题目大意 给出n,kn,kn,k,求∑i=0n(ni)ik\sum_{i=0}^n\binom{n}{i}i^ki=0∑n​(i ...

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

    bzoj5093: [Lydsy1711月赛]图的价值 题目描述 Solution 考虑每一个点的贡献,枚举它的度数. Ans=n∗2(n−12)∑i=1n−1(n−1i)∗ikAns=n*2^{\t ...

  7. [BZOJ 5093]图的价值

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

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

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

  9. [gdoi2018 day1]小学生图论题【分治NTT】

    正题 题目大意 一张随机的nnn个点的竞赛图,给出它的mmm条相互无交简单路径,求这张竞赛图的期望强联通分量个数. 1≤n,m≤1051\leq n,m\leq 10^51≤n,m≤105 解题思路 ...

最新文章

  1. 投稿近2000,NAACL 2019接收率仅为22.6%|附录取论文名单
  2. 多级反馈队列调度算法具体原理
  3. 第三次学JAVA再学不好就吃翔(part19)--二维数组
  4. 三十六、rsync通过服务同步、Linux系统日志、screen工具
  5. Windows7环境下用VirtualBox (5.1)上安装Ubuntu 17.10
  6. 主成分分析和因子分析十大不同点
  7. POJ 1252 Euro Efficiency
  8. 【Python】类的基本写法与注释风格
  9. 【LeetCode】智商题 brainteaser(共3题)
  10. thinkjs——两表联查
  11. HA功能与DRS配合使用
  12. MySQL 获取物理表的主键字段
  13. 郑州大学校园网使用指南
  14. 德生收音机创始人梁伟(华工杰出校友)的无线电之梦
  15. 我的人生观、爱情观和世界观
  16. STM32基于HAL工程硬件I2C读写AT24C02/04/08数据
  17. 【c/c++编程】数学类问题:同余模、最大公约数、最小公倍数、素数判定
  18. vue 大量图片展示_Ant Design of Vue 展示多张图片
  19. Flutter (仿微信通讯录)按字母分组列表
  20. Java DES 加密解密

热门文章

  1. 洛谷 P1463 [SDOI2005]反素数ant P1820 寻找AP数
  2. 更改IE浏览器的收藏夹位置
  3. Linux串口编程(中断方式和select方式)
  4. 微软MVC对架构的一点思考
  5. 分享-动态性能表详解
  6. php分块查找,索引查找(索引查找、分块查找) C语言实现
  7. win10鼠标灵敏度怎么调_和平精英灵敏度怎么设置才最合适 调最适合自己用的
  8. pythongoogle.probuf.timestamp_gRPC快速入门(一)——Protobuf简介
  9. python中排序的函数_Python中sorted()排序函数
  10. elasticsearch新增_SpringBoot 使用JestClient操作Elasticsearch