9.25DAY1T1

【问题描述】

  一开始森林里面有N只互不相识的小猴子,它们经常打架,但打架的双方都必须不是好朋友。每次打完架后,打架的双方以及它们的好朋友就会互相认识,成为好朋友。经过N-1次打架之后,整个森林的小猴都会成为好朋友。 现在的问题是,总共有多少种不同的打架过程。 比如当N=3时,就有{1-2,1-3}{1-2,2-3}{1-3,1-2}{1-3,2-3}{2-3,1-2}{2-3,1-3}六种不同的打架过程。

【输入】

  一个整数N。

【输出】

  一行,方案数mod 9999991。

【样例输入】

4

【样例输出】

96

【数据范围与约定】

50%的数据N<=10^3。
100%的数据N<=10^6

 

分析:n个点的无根树的个数实际上与prufer序列有关,cayley序列告诉我们n点无根树数量是n^(n-2)个,由于这道题里面要把排列计算进去,所以就要乘以(n-1)!

最后ans要记得开long  long,这道题还好没有说要写快速幂,就是一个板子题目了

code:

 1 #include<iostream>
 2 #include<cstdio>
 3 using namespace std;
 4 const int mod=9999991;
 5 int main(){
 6     int n;
 7     cin>>n;
 8     long long ans=1;
 9     for(int i=1;i<=n-2;i++){
10         ans*=n;
11         ans%=mod;
12     }
13     for(int i=1;i<=n-1;i++){
14         ans*=i;
15         ans%=mod;
16     }
17     cout<<ans;
18     return 0; 
19 }

 

posted @ 2018-09-25 15:06  saionjisekai  阅读(35)  评论(0编辑  收藏  举报