博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
BZOJ1430小猴打架——prufer序列
阅读量:5904 次
发布时间:2019-06-19

本文共 900 字,大约阅读时间需要 3 分钟。

题目描述

一开始森林里面有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,N<=10^6

输出

一行,方案数mod 9999991。

样例输入

4

样例输出

96
 
答案可以看作是生成树个数*生成一棵树的方案数
根据$prufer$序列的性质(即每棵树与其$prufer$序列一一对应),$n$个点的无向完全图的生成树个数为$n^{n-2}$,即$n$个点的有编号无根树个数
生成一棵树有$n-1$条边,那么生成一棵树的方案数就是这$n-1$条边的排列数,即$(n-1)!$
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#define ll long long#define mod 9999991using namespace std;int n;ll ans=1ll;int main(){ scanf("%d",&n); for(int i=1;i<=n-2;i++) { ans=ans*n%mod; } for(int i=1;i<=n-1;i++) { ans=ans*i%mod; } printf("%lld",ans);}

转载于:https://www.cnblogs.com/Khada-Jhin/p/10256967.html

你可能感兴趣的文章
我的友情链接
查看>>
CDN相关
查看>>
Tomcat的设置4——Tomcat的体系结构与设置基于端口号的虚拟主机
查看>>
三种判断端口存活的方法和链接200的判断方法
查看>>
我的友情链接
查看>>
ftp协议基础
查看>>
顺时针打印矩阵
查看>>
访问共享经常中断
查看>>
人生的交易
查看>>
MySql
查看>>
算法分析与设计——贪心法实验报告
查看>>
js时间戳与日期格式的相互转换
查看>>
POJ - 1062 昂贵的聘礼(Dijkstra)
查看>>
Java多态和动态绑定是如何实现的
查看>>
sql server 下载安装标记
查看>>
Android学习6—单元测试的使用
查看>>
js运算符(运算符的结合性)
查看>>
最长上升子序列问题
查看>>
C#中的析构函数
查看>>
idea 编译级别的设置
查看>>