「Luogu4430」小猴打架
「Luogu4430」小猴打架
题目描述
一开始森林里面有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。
输入输出样例
输入样例#1
1 | 4 |
输出样例#1
1 | 96 |
说明
50%的数据N<=10^3。 100%的数据N<=10^6。
Code
1 |
|
…
???
Solution
题目等价于求一个有个节点的完全图的生成树的方案有多少个
两个方案不同当且仅当生成树中有至少一条边不同,或者生成树相同,而加边的顺序不同
前置知识:
Cayley公式:对于一个有个节点的完全图,它的生成树个数有个
证明需要用到prufer编码,其实matrix-tree定理也可以证明
下面是两篇分别通过prufer编码和matrix-tree定理证明Cayley的博客:
经典证明:Prüfer编码与Cayley公式
题解 P4430 【小猴打架】
然后是这道题,对于每棵生成树,有种顺序将边加入生成树中,所以还要乘上去
https://blog.lizbaka.moe/2019/01/20/%E3%80%8CLuogu4430%E3%80%8D%E5%B0%8F%E7%8C%B4%E6%89%93%E6%9E%B6/
本博客所有文章除特别声明外,均采用 CC BY-NC 4.0 许可协议。转载请注明来自 lizbaka的博客!
评论