日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

BZOJ5093图的价值(斯特林数)

發布時間:2023/12/1 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 BZOJ5093图的价值(斯特林数) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

題目描述

“簡單無向圖”是指無重邊、無自環的無向圖(不一定連通)。 一個帶標號的圖的價值定義為每個點度數的k次方的和。 給定n和k,請計算所有n個點的帶標號的簡單無向圖的價值之和。 因為答案很大,請對998244353取模輸出。 題解 因為懶得敲公式了,所以就直接粘題解了。 我們發現在這張圖中每個點都是等價的,所以我們就只需要考慮一個點的貢獻,最后乘上n就可以了。 、 當一個點的度數為i時,我們可以從其他n-1個點中任意挑出i個點和它連邊,而其余n-1個點之間可以任意連邊。 然后我們發現后面那一坨和i無關,可以放到前面去,所以我們實際上是在求 然后ik這種東西有一個恒等式

?

S(k,i)為第二類斯特林數,意義為k個小球放入i個不同的盒子里的方案數。

等式的左邊意義為把k個不同小球放到x個不同的盒子中的方案數。

右邊是在枚舉有哪些盒子里有球,還是比較好理解的。

那么我們把這個指數的東西代換完后式子變成了

把枚舉j的sigma提前

后面的那個東西看起開很難受,如果我們可以把n和j放在一起,式子就可以往前放了。

從n個小球中選i個,再從i個中選j個等價于從n個小球中選j個,再從剩下的(n-j)個中選(i-j)個。

于是我們就可以吧C(n,j)提前了,后面的組合數可以直接用恒等式換掉。

然后我們只要求出所有S(k,j)就可以了,這個用NTT解決。

代碼

#include<iostream> #include<cstdio> #define N 2000009 using namespace std; typedef long long ll; const int G=3; const int Gi=332748118; const int mod=998244353; ll l,L,a[N],b[N],jie[N],ni[N],nii[N],n,k,ans,c[N]; int rev[N]; ll power(ll x,ll y){if(y<0)return 0;ll ans=1;x%=mod;while(y){if(y&1)ans=ans*x%mod;x=x*x%mod;y>>=1;}ans=(ans+mod)%mod;return ans; } inline ll ny(ll x){return power(x,mod-2);} inline ll C(ll n,ll m){return jie[n]*ni[m]%mod*ni[n-m]%mod;} inline void NTT(ll *a,int tag){for(int i=0;i<l;++i)if(i>rev[i])swap(a[i],a[rev[i]]);for(int i=1;i<l;i<<=1){ll wn=power(tag==1?G:Gi,(mod-1)/(i<<1));for(int j=0;j<l;j+=(i<<1)){ll w=1;for(int k=0;k<i;++k,w=w*wn%mod){ll x=a[j+k],y=a[i+j+k]*w%mod;a[j+k]=(x+y)%mod;a[i+j+k]=(x-y+mod)%mod;}}} } int main(){ // cout<<power(3,mod-2);scanf("%lld%lld",&n,&k);ll yu=n%mod*power(2,(n-1)*(n-2)/2)%mod;n--;jie[0]=1;for(int i=1;i<=k;++i)jie[i]=jie[i-1]*i%mod;ni[k]=power(jie[k],mod-2);for(int i=k-1;i>=0;--i)ni[i]=ni[i+1]*(i+1)%mod;for(int i=0;i<=k;++i)a[i]=(power(-1,i)*ni[i]+mod)%mod;for(int i=0;i<=k;++i)b[i]=power(i,k)*ni[i]%mod;l=1;L=0;while(l<=(k<<1))l<<=1,L++; for(int i=1;i<l;++i)rev[i]=(rev[i>>1]>>1)|((i&1)<<(L-1));NTT(a,1);NTT(b,1);for(int i=0;i<l;++i)a[i]=a[i]*b[i]%mod;NTT(a,-1);ll nn=ny(l);c[0]=1;for(int i=1;i<=min(k,n);++i)c[i]=c[i-1]*ny(i)%mod*(n-i+1)%mod;for(int i=0;i<=k;++i){a[i]=a[i]*nn%mod;(ans+=a[i]*jie[i]%mod*c[i]%mod*power(2,n-i)%mod)%=mod;}ans=ans*yu%mod;cout<<ans;return 0; }

?

?

?

轉載于:https://www.cnblogs.com/ZH-comld/p/10256947.html

總結

以上是生活随笔為你收集整理的BZOJ5093图的价值(斯特林数)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。