bzoj1430: 小猴打架(prufer序列)

1430: 小猴打架

题目:传送门


 

 

简要题意:

   n只互不相识的猴子打架,打架之后就两两之间连边(表示已经相互认识),只有不认识(朋友的朋友都是朋友)的两只猴子才会打架。最后所有的猴子都会连成一棵树,也就是经过n-1次打架,求不同的打架方案数。


 

 

题解:

   我们需要一个强大的方法:prufer序列。。。

   这个东西很牛逼!!!

   简单来说就是把一颗n个节点的无根树,转换为n-2的一个序列

   序列和树之间两两可互相转化,且是一一对应的。

   具体%%%神犇:prufer序列 


 

 

思考niang小时,代码niang分钟:

 1 #include<cstdio>
 2 #include<cstring>
 3 using namespace std;
 4 typedef long long LL;
 5 const LL mod=9999991LL;
 6 int n;
 7 int main()
 8 {
 9     LL ans=1;
10     scanf("%d",&n);
11     for(int i=1;i<=n-2;i++)ans=ans*n%mod;
12     for(LL i=1;i<n;i++)ans=ans*i%mod;
13     printf("%lld\n",ans);
14     return 0;
15 }

 

posted @ 2018-01-21 09:54  CHerish_OI  阅读(210)  评论(0编辑  收藏  举报