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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

[HNOI2008 Tree]

發布時間:2025/3/15 编程问答 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 [HNOI2008 Tree] 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

[關鍵字]:Prüfer編碼?Cayley定理

[題目大意]:告訴你N結點的樹上部分點的度數,求這樣的樹一共有多少棵.

//==================================================================================

[分析]:剛剛看到這題時一點思路也沒有,又想了一會兒,還是沒思路……這題其實和Prüfer編碼Cayley定理有關系,Cayley定理:一個n個節點的無根樹有nn-2種形態。這個定理可以通過Prüfer編碼來證明,見這里。通過Prüfer編碼的推廣可以得到n各右度限制的節點的無根樹的個數,而n各有些有度限制的無根樹個數怎么算呢?首先把有度限制的先算出來:

tot!/(d1-1)!/(d2-1)!……/(di-1)!(tot是所有度之和),因為實在n-2個位置中選出tot個所以還有再乘C(n-2,tot),而剩下的沒有度限制的節點需要放在n-2-tot個位置,一共有

(n-tot)(n-2-tot)種方案,所以總共的方案數為:(n-tot)(n-2-tot)*C(n-2,tot)*tot!/(d1-1)!/(d2-1)!……/(di-1)!,稍微化簡一下計算,除法要用分解質因數乘法要用高精度。

[代碼]:

#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<algorithm>
using namespace std;

const int MAXN=10000;

int n,tot,now,c,sum;
int a[MAXN],s[MAXN],p[MAXN];
int ans[MAXN];
bool v[MAXN];

void Add(int x,int c)
{
for (int i=1;i<=sum;++i)
while (x%s[i]==0)
{
p[i]+=c;
x/=s[i];
}
}

void Cheng(int t)
{
int k=0;
for (int i=1;i<=c;++i)
{
ans[i]=ans[i]*t+k;
k=ans[i]/10;
ans[i]=ans[i]%10;
}
while (k)
{
ans[++c]=k%10;
k=k/10;
}
}

void Init()
{
scanf("%d",&n);
for (int i=1;i<=n;++i)
{
scanf("%d",&a[i]);
if (a[i]!=-1) tot+=a[i]-1; else ++now;
}
memset(v,0,sizeof(v));
for (int i=2;i<=n;++i)
{
if (!v[i]) s[++sum]=i;
for (int j=1;(j<=sum && i*s[j]<=n);++j)
{
v[i*s[j]]=1;
if (i%s[j]==0) break;
}
}
}

void Solve()
{
for (int i=n-1-tot;i<=n-2;++i) Add(i,1);
for (int i=1;i<=n;++i)
if (a[i]!=-1)
for (int j=2;j<a[i];++j) Add(j,-1);
for (int i=1;i<=n-2-tot;++i) Add(now,1);
c=1;
ans[1]=1;
for (int i=1;i<=sum;++i)
for (int j=1;j<=p[i];++j)
Cheng(s[i]);
for (int i=c;i>=1;--i)
printf("%d",ans[i]);
printf("\n");
}

int main()
{
freopen("in.txt","r",stdin);
freopen("out.txt","w",stdout);
Init();
Solve();
return 0;
}



轉載于:https://www.cnblogs.com/procedure2012/archive/2012/04/06/2435496.html

總結

以上是生活随笔為你收集整理的[HNOI2008 Tree]的全部內容,希望文章能夠幫你解決所遇到的問題。

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