luogu4430 小猴打架
假硕讲了个prufer编码和Caylay公式
我为了证明prufer编码没用
所以用矩阵树定理证明了Caylay公式
让我们用矩阵树定理推一波
首先这个小猴打架最后会打成一棵树,这棵树是N个点的完全图的生成树
所以用矩阵树定理
构建矩阵(N个点的完全图)
这是我们的邻接矩阵
\(\begin{vmatrix}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{vmatrix}\)
然后是我们的度数矩阵
\(\begin{vmatrix}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{vmatrix}\)
所以说我们的基尔霍夫矩阵是N*N的下面矩阵:
\(\begin{vmatrix}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{vmatrix}\)
然后我们开始大力跑代数余子式
划掉第N行第N列的元素得到一个(N-1)*(N-1)的矩阵:
\(\begin{vmatrix}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{vmatrix}\)
注意这个矩阵是(N-1)*(N-1)的
然后对这个矩阵进行各种初等变换(初等乱搞)(以下方法参考《线性代数》)
我们先让第一行成为所有(N-1)行的和(初等变换第三条)
\(\begin{vmatrix}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{vmatrix}\)
然后让第2~(N-1)行都加上第一行(初等变换第三条)
\(\begin{vmatrix}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{vmatrix}\)
消成了上三角矩阵(美滋滋)
所以行列式就是对角线元素相乘,有1个1,(N-2)个N
所以生成树个数为\(N^{N-2}\)
然后
考虑生成树的每一条边
小猴打架可以按照任意的顺序
所以每一种生成树的产生顺序就是他的边的排列个数,
有\((N-1)\)条边所以排列为\((N-1)!\)
所以最后答案是\(N^{N-2}(N-1)!\)
#include <bits/stdc++.h>
using namespace std;
#define p 9999991
long long n, ans = 1;
int main()
{
scanf("%lld", &n);
for (int i = 1; i <= n - 2; i++)
ans = ans * n % p * (i + 1) % p;
printf("%lld\n", ans);
return 0;
}
让我们一起膜拜大佬林瑞堂@olinr
luogu4430 小猴打架的更多相关文章
- 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$个节点我们 ...
- bzoj1430: 小猴打架(prufer序列)
1430: 小猴打架 题目:传送门 简要题意: n只互不相识的猴子打架,打架之后就两两之间连边(表示已经相互认识),只有不认识(朋友的朋友都是朋友)的两只猴子才会打架.最后所有的猴子都会连成一棵树,也 ...
- P4430 小猴打架、P4981 父子
prufer编码 当然你也可以理解为 Cayley 公式,其实这个公式就是prufer编码经过一步就能推出的 P4430 小猴打架 P4981 父子 这俩题差不多 先说父子,很显然题目就是让你求\(n ...
随机推荐
- spring整合mybatis的事物管理配置
一.基本配置 <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http:/ ...
- Mediaplayer
Mediaplayer报错 prepareAsync called in state 1 是因为在setDataSource之前调用了prepare.因为setDataSource放到了线程里 ...
- Android键盘属性
在主xml中android:windowSoftInputMode的属性"stateUnspecified"软键盘的状态(是否它是隐藏或可见)没有被指定.系统将选择一个合适的状态或 ...
- UWP蓝牙的例子
https://answers.microsoft.com/zh-hans/windows/forum/windows_10-networking/%e5%9c%a8win10%e7%8e%af%e5 ...
- nginx 代理参数介绍
2)我们可以看到nginx文件夹内有一个conf文件夹,其中有好几个文件,其他先不管,我们打开nginx.conf,可以看到一段: 这段代码在server里面,相当于一个代理服务器,当然可以配置多个. ...
- 初步认识ASP.NET WebForm
C#可已进行以下两大类的开发 一.客户端应用程序C/S 主要有两种开发技术: 1.winForm windows窗体应用程序 2.WPF微软新一代图形框架 MFC(比较老的开发技术) MVVM(客户端 ...
- ROS Learning-031 (提高篇-009 A Mobile Base-07) 控制移动平台 --- (操作)人机交互
ROS 提高篇 之 A Mobile Base-07 - 控制移动平台 - (操作)人机交互 我使用的虚拟机软件:VMware Workstation 11 使用的Ubuntu系统:Ubuntu 14 ...
- oracle 监听服务OracleOraDb11g_home1TNSListener打开后立马停止错误
首先我真得吐槽一下,我安装这个破软件感觉真的是把能遇到的错误都遇到一遍了,生气!!!!!!! 关于监听服务OracleOraDb11g_home1TNSListener打开后立马停止这个错误,我的解决 ...
- notpad++ 开发php神奇
开发PHP应具有的插件: 1. Compare: 可以用来比较两个文件不同之处. 2. Explorer:文件浏览器插件,包含收藏夹.Session保存功能.可与NppExec脚本结合使用. 3. ...
- 在centos上安装sequoaidb的php驱动
1:搭建PHP的运行环境 yum install httpd httpd-devel yum install php php-devel yum install php-gd php-imap p ...