小猴打架(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\}\)六种不同的打架过程。
Input
一个整数N。
Output
一行,方案数\(mod 9999991\)。
Sample Input
4
Sample Output
96
Hint
50%的数据\(N<=10^3\)。 100%的数据\(N<=10^6\)。
题意:
中文题面,不解释
题解:
用矩阵树定理
先得一邻接矩阵\((1)\)
\begin{matrix}
0 & 1 & 1 & \cdots & 1\\
1 & 0 & 1 & \cdots & 1\\
1 & 1 & 0 & \cdots & 1\\
\vdots & \vdots & \vdots & \ddots & \vdots\\
1 & 1 & 1 & \cdots & 0
\end{matrix}
\right|\tag{1}
\]
再得一度数矩阵\((2)\)
\begin{matrix}
N-1 & 0 & 0 & \cdots & 0\\
0 & N-1 & 0 & \cdots & 0\\
0 & 0 & N-1 & \cdots & 0\\
\vdots & \vdots & \vdots & \ddots & \vdots\\
0 & 0 & 0 & \cdots & N-1
\end{matrix}
\right|\tag{2}
\]
\(\{2\}-\{1\}\)得基尔霍夫矩阵\((3)\)
\begin{matrix}
N-1 & -1 & -1 & \cdots & -1\\
-1 & N-1 & -1 & \cdots & -1\\
-1 & -1 & N-1 & \cdots & -1\\
\vdots & \vdots & \vdots & \ddots & \vdots\\
-1 & -1 & -1 & \cdots & N-1
\end{matrix}
\right|\tag{3}
\]
取前\(N-1\)行\(N-1\)列高斯消元,得\((4)\)
\begin{matrix}
1 & 1 & 1 & \cdots & 1\\
0 & N & 0 & \cdots & 0\\
0 & 0 & N & \cdots & 0\\
\vdots & \vdots & \vdots & \ddots & \vdots\\
0 & 0 & 0 & \cdots & N
\end{matrix}
\right|\tag{4}
\]
然后求一下行列式就是答案了:
\(N^{N-2}\)
额,好吧还需要乘一个排列,因为打架的顺序可以不同
所以答案其实是:
\(N^{N-2}(N-1)!\)
#include<bits/stdc++.h>
#define ll long long
using namespace std;
const ll p=9999991;
ll a,ans=1;
int main(){
cin>>a;
for(ll i=1;i<=a-2;++i){
ans*=a;
ans%=p;
}
for(ll i=1;i<=a-1;++i){
ans*=i;
ans%=p;
}
cout<<ans<<endl;
}
小猴打架(luogu4430)(数论+生成树计数)的更多相关文章
- luogu4430 小猴打架
假硕讲了个prufer编码和Caylay公式 我为了证明prufer编码没用 所以用矩阵树定理证明了Caylay公式 让我们用矩阵树定理推一波 首先这个小猴打架最后会打成一棵树,这棵树是N个点的完全图 ...
- P4430 小猴打架
P4430 小猴打架 题目意思就是让你求,在网格图中(任意两点都有边)的生成树的个数(边的顺序不同也算不同的方案). 首先我们考虑一个生成树,由于一定有n-1条边,单单考虑添加边的顺序,根据乘法原理, ...
- BZOJ1430: 小猴打架
1430: 小猴打架 Time Limit: 5 Sec Memory Limit: 162 MBSubmit: 328 Solved: 234[Submit][Status] Descripti ...
- bzoj 1430: 小猴打架 -- prufer编码
1430: 小猴打架 Time Limit: 5 Sec Memory Limit: 162 MB Description 一开始森林里面有N只互不相识的小猴子,它们经常打架,但打架的双方都必须不是 ...
- 【BZOJ 1430】 1430: 小猴打架 (Prufer数列)
1430: 小猴打架 Time Limit: 5 Sec Memory Limit: 162 MBSubmit: 625 Solved: 452 Description 一开始森林里面有N只互不相 ...
- 洛谷 P4430 小猴打架
洛谷 P4430 小猴打架 题目描述 一开始森林里面有N只互不相识的小猴子,它们经常打架,但打架的双方都必须不是好朋友.每次打完架后,打架的双方以及它们的好朋友就会互相认识,成为好朋友.经过N-1次打 ...
- bzoj 1430: 小猴打架
1430: 小猴打架 Time Limit: 5 Sec Memory Limit: 162 MBSubmit: 634 Solved: 461[Submit][Status][Discuss] ...
- bzoj 1430 小猴打架 prufer 性质
小猴打架 Time Limit: 5 Sec Memory Limit: 162 MBSubmit: 709 Solved: 512[Submit][Status][Discuss] Descri ...
- [bzoj1430]小猴打架_prufer序列
小猴打架 bzoj-1430 题目大意:题目链接. 注释:略. 想法: 我们发现打架的情况就是一棵树. 我们只需要把确定树的形态然后乘以$(n-1)!$表示生成这棵树时边的顺序. 一共$n$个节点我们 ...
随机推荐
- 栈(NOIP2003&水题测试2017082501)
题目链接:栈 这题不难. 我们看一下,其实可以发现是卡特兰数. 不知道卡特兰数?没事,给你简单讲一下. 卡特兰数的递推式f(n)=f(0)*f(n-1)+f(1)*f(n-2)+-+f(n-2)*f( ...
- zookeeper集群的搭建(三台相同)
查看jdk java -version 卸载自带jdk rpm -qa|grep java rpm -e --nodeps tzdata-java-2015e-1.el6.noarch rpm -e ...
- rails 查看项目的所有路由
rails routes
- centos 7 安装svn客户端
rpm -qa subversion yum remove -y subversion yum install -y subversion svnserve --version svn checkou ...
- 使用Docker镜像
1 使用Docker镜像 1.1 获取镜像 命令格式:docker pull NAME[:TAG] NAME为镜像仓库的名称 TAG为镜像的标签(表示版本号) 描述一个镜像需要包括:名称+ ...
- excel怎样添加的选项卡中含有下拉列表
<customUI xmlns="http://schemas.microsoft.com/office/2006/01/customui"> <ribbon s ...
- DocumentType类型
并不常用 nodeType 10 nodeName doctype的名称 NodeValue 值为null parentNode Document 不支持子节点 DocumentType不能动态创建, ...
- Typecho 官方文档 接口介绍
官方开发文档实在是太潦草了 Widget_Archive 接口 参数 描述 indexHandle $archive Widget_Archive对象 $select Typecho_Db_Query ...
- Python 之 Difflib
Python 之 Difflib 2017年7月8日 word文档地址:https://wenku.baidu.com/view/36692440854769eae009581b6bd97f19237 ...
- C#重点内容之:接口(interface)(一)网络初级示例
这一篇来源于网络,简单介绍了接口的概念 接口是体现面向对象编程思想优越性的一件利器,为什么这么说呢? 首先我们来看,接口是为继承而存在的,如果没有继承,那就自然不需要接口了,既然有继承,那就需要把可能 ...