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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

CF917D-Stranger Trees【矩阵树定理,高斯消元】

發(fā)布時間:2023/12/3 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 CF917D-Stranger Trees【矩阵树定理,高斯消元】 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

正題

題目鏈接:https://www.luogu.com.cn/problem/CF917D


題目大意


給出nnn個點的一棵樹,對于每個kkk求有多少個nnn個點的樹滿足與給出的樹恰好有kkk條邊重合。


解題思路

矩陣樹有一個統(tǒng)計所有樹邊權和的和用法,就是把變量變成一個形如wx+1wx+1wx+1的多項式,這樣一次項系數(shù)的值就表示了固定選擇一條邊的www時其他邊的方案數(shù)之和。

這題我們可以同理,對于在給出數(shù)上的邊是xxx,而其他就是111。那么最后詢問xkx^kxk的系數(shù)就是答案了。

如果暴力套NTT\text{NTT}NTT不僅麻煩,而且跑的很慢過不了本題,考慮另一種求系數(shù)的方法。

我們假設答案是一個形如F(x)=∑i=0n?1aixiF(x)=\sum_{i=0}^{n-1}a_ix^iF(x)=i=0n?1?ai?xinnn次項式,那么我們如果把nnnxxx的值直接帶入求出FFF,然后用待定系數(shù)法的話我們就可以列出nnn個方程從而解出這個nnn項式的每一個系數(shù)。

時間復雜度O(n4)O(n^4)O(n4)


code

#include<cstdio> #include<cstring> #include<algorithm> #define ll long long using namespace std; const ll N=110,P=1e9+7; ll n,x[N],y[N]; ll power(ll x,ll b){ll ans=1;while(b){if(b&1)ans=ans*x%P;x=x*x%P;b>>=1;}return ans; } namespace Guass{ll a[N][N],b[N];void solve(){for(ll i=1;i<=n;i++){ll z=i;for(ll j=i;j<=n;j++)if(a[j][i]){z=j;break;}swap(a[i],a[z]);swap(b[i],b[z]);ll inv=power(a[i][i],P-2);for(ll j=i;j<=n;j++)a[i][j]=a[i][j]*inv%P;b[i]=b[i]*inv%P;for(ll j=i+1;j<=n;j++){ll rate=P-a[j][i];for(ll k=i;k<=n;k++)(a[j][k]+=rate*a[i][k]%P)%=P;(b[j]+=rate*b[i]%P)%=P;}}for(ll i=n;i>=1;i--){for(ll j=i+1;j<=n;j++)(b[i]+=P-b[j]*a[i][j]%P)%=P;}return;} } namespace Matrix{ll a[N][N];ll det(){ll f=1,ans=1;for(ll i=1;i<n;i++){ll z=i;for(ll j=i;j<n;j++)if(a[j][i]){if(j!=i)f=-f;z=j; break;}swap(a[i],a[z]);ll inv=power(a[i][i],P-2);ans=ans*a[i][i]%P;for(ll j=i;j<n;j++)a[i][j]=a[i][j]*inv%P;for(ll j=i+1;j<n;j++){ll rate=P-a[j][i];for(ll k=i;k<n;k++)(a[j][k]+=rate*a[i][k]%P)%=P;}}return ans*f;}void solve(ll w){for(ll i=1;i<=n;i++)for(ll j=1;j<=n;j++)a[i][j]=P-1;for(ll i=1;i<=n;i++)a[i][i]=n-1;for(ll i=1;i<n;i++){a[x[i]][x[i]]+=w-1;a[y[i]][y[i]]+=w-1;a[x[i]][y[i]]=P-w;a[y[i]][x[i]]=P-w;}Guass::b[w]=det();for(ll i=1,p=1;i<=n;i++,p=p*w%P)Guass::a[w][i]=p;return;} } signed main(){scanf("%lld",&n);for(ll i=1;i<n;i++)scanf("%lld%lld",&x[i],&y[i]);for(ll i=1;i<=n;i++)Matrix::solve(i);Guass::solve();for(ll i=1;i<=n;i++)printf("%lld ",Guass::b[i]);return 0; }

總結

以上是生活随笔為你收集整理的CF917D-Stranger Trees【矩阵树定理,高斯消元】的全部內容,希望文章能夠幫你解決所遇到的問題。

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