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 }