题意:求n个点,可以连接出多少种不同的生成树
Cayley定理在组合数学上的应用
以下从百度百科摘一段:
过n个有标志顶点的树的数目等于n^(n-2)。
定理的理解:
此定理说明用n-1条边将n个一致的顶点连接起来的连通图的个数为n^(n-2),也可以这样理解,将n个城市连接起来的树状公路网络有n^(n-2)种方案。所谓树状,指的是用n-1条边将n个顶点构成一个连通图。当然,建造一个树状的公路网络将n个城市连接起来,应求其中长度最短、造价最省的一种,或效益最大的一种。Cayley定理只是说明可能方案的数目。
定理的一个证明:
【学习总结】数学-cayley定理 - 卧槽,考试了~ - 博客频道 - CSDN.NET
#include <cstdio>
#define i64 long long
i64 Cal (i64 s,i64 index,i64 mod)
{
i64 ans=1;
s%=mod;
while (index>=1)
{
if ((index&1)==1) //奇数
ans=(ans*s)%mod;
index>>=1;
s=s*s%mod;
}
return ans;
}
int main ()
{
int T;
scanf("%d",&T);
for (int Cas=1;Cas<=T;Cas++)
{
i64 n;
scanf("%lld",&n);
printf("Case #%d: %lld\n",Cas,Cal(n,n-2,2000000011));
}
return 0;
}