bzoj 5305: [Haoi2018]蘋果樹

來源:互聯網
上載者:User

標籤:http   png   open   bit   bzoj   技術分享   就是   zoj   一個   

Description

Solution

\(n\) 個點的二叉樹的方案數是 \(n!\)
證明十分顯然:新加入的點佔掉了 \(1\) 個位置,新加了 \(2\) 個位置,那麼多出來一個位置,所以第 \(i\) 個點有 \(i\) 种放法
考慮每條邊被經過的次數,設子樹大小為 \(size\),就是 \(size*(n-size)\)
以此考慮每個點父邊被經過的次數,枚舉子樹大小
然後貢獻就是子樹內部形態的方案數乘以外部形態的方案數
內部的顯然就是 \(size!\) , 但是編號還不確定,所以是 \(size!*C_{n-i}^{size-1}\)
外部的我們先確定一個大小為 \(i\) 的樹,再把多出來的 \(n-size-i+1\) 個拼上去,方案數為 \(\frac{(n-j-1)!}{(i-2)!}\)

#include<bits/stdc++.h>using namespace std;const int N=2010;int n,mod,c[N][N],Fac[N],w[N][N];inline int F(int x,int y){    if(y<=0)return 1;    return w[x][y];}int main(){  freopen("pp.in","r",stdin);  freopen("pp.out","w",stdout);  cin>>n>>mod;  for(int i=0;i<=n;i++){      c[i][0]=1;      for(int j=1;j<=i;j++)c[i][j]=(c[i-1][j-1]+c[i-1][j])%mod;  }  Fac[0]=1;  for(int i=1;i<=n;i++)Fac[i]=1ll*Fac[i-1]*i%mod;  for(int i=1;i<=n;i++){      w[i][0]=1;      for(int j=1;j<=n;j++)w[i][j]=1ll*w[i][j-1]*(i+j-2)%mod;  }  int ans=0;  for(int i=2;i<=n;i++)      for(int j=n-i+1;j>=1;j--)          ans=(ans+1ll*Fac[j]*c[n-i][j-1]%mod*Fac[i]%mod*F(i,n-j-i+1)%mod*(n-j)%mod*j)%mod;  cout<<ans<<endl;  return 0;}

bzoj 5305: [Haoi2018]蘋果樹

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.