CF917D-Stranger Trees【矩阵树定理,高斯消元】
生活随笔
收集整理的這篇文章主要介紹了
CF917D-Stranger Trees【矩阵树定理,高斯消元】
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
正題
題目鏈接:https://www.luogu.com.cn/problem/CF917D
題目大意
給出nnn個點的一棵樹,對于每個kkk求有多少個nnn個點的樹滿足與給出的樹恰好有kkk條邊重合。
解題思路
矩陣樹有一個統計所有樹邊權和的和用法,就是把變量變成一個形如wx+1wx+1wx+1的多項式,這樣一次項系數的值就表示了固定選擇一條邊的www時其他邊的方案數之和。
這題我們可以同理,對于在給出數上的邊是xxx,而其他就是111。那么最后詢問xkx^kxk的系數就是答案了。
如果暴力套NTT\text{NTT}NTT不僅麻煩,而且跑的很慢過不了本題,考慮另一種求系數的方法。
我們假設答案是一個形如F(x)=∑i=0n?1aixiF(x)=\sum_{i=0}^{n-1}a_ix^iF(x)=∑i=0n?1?ai?xi的nnn次項式,那么我們如果把nnn個xxx的值直接帶入求出FFF,然后用待定系數法的話我們就可以列出nnn個方程從而解出這個nnn項式的每一個系數。
時間復雜度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【矩阵树定理,高斯消元】的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 北京十大西餐店排行榜:蓝蛙上榜,第十是失
- 下一篇: 盲女第五人格天赋 第五人格盲女天赋加点详