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 }