\(Prufer\)序列

在一棵\(n\)个点带标号无根树里,我们定义这棵树的\(Prufer\)序列为执行以下操作后得到的序列

1.若当前树中只剩下两个节点,退出,否则执行\(2\)

2.令\(u\)为树中编号最小的叶子节点,记\(v\)为唯一与\(u\)有边相连的节点,把\(u\)删去,并将\(v\)加入到序列的末尾,重复\(1\)

显然,得到的\(Prufer\)序列是一个长度为\(n-2\)的序列

易证每一棵\(n\)个节点的有标号无根树都唯一对应一个长度为\(n-2\)的\(Prufer\)序列

无根树对应序列很容易证明,接下来我们要证明的是序列唯一对应无根树。我们只要知道如何根据序列求对应的无根树,并且保证求出的无根树唯一即可

根据序列求无根树,就是重复下列过程

1.令\(A=\{1,2,3,...,n\}\),不断重复\(2\)直到\(Prufer\)序列为空

2.找到\(A\)中最小的不在\(Prufer\)序列中的元素,将其与\(Prufer\)序列首元素连边,同时删除这个点和\(Prufer\)序列首元素

3.此时\(A\)中还剩下两个点,将它们连边即可

不难看出,如果一个点在树中度数为\(deg_i\),那么它在\(Prufer\)序列中的出现次数为\(deg_i-1\)

\(Cayley's\ Formula\)

因为长度为\(n-2\),每个元素取值范围为\([1,n]\)的序列个数为\(n^{n-2}\),根据无根树与\(Prufer\)序列的一一对应关系,有

\(n\)个点带标号无根树的个数为\(n^{n-2}\)

另外还有一个拓展

设树中点\(i\)的度数为\(d_i\),那么对应的无根树数量为\({(n-2)!\over \prod_{i=1}^n d_i}\)

\(Generalized\ Cayley's\ Formula\)

设\(f(n,m)\)为\(n\)个点构成\(m\)棵树,且\(1,2,3...,m\)全都不在同一棵树中,的方案数,有标号,无根

先给结论

\[f(n,m)=mn^{n-m-1}\]

当\(m=1\)时有\(f(n,1)=n^{n-2}\),即为\(Cayley's\ Formula\)

证明的话,我们采用归纳法

首先对于边界条件,有\(f(1,1)=1,f(n,0)=0\)

我们假设对于所有\(k<n\),\(f(k,m)=mk^{k-m-1}\)恒成立,接下来我们要证明\(f(n,m)=mn^{n-m-1}\)

为了方便起见,我们

我们枚举\(1\)号点的度数\(i\),以及与\(1\)相连的这\(i\)个点,那么去掉\(1\)号点之后,会留下\(n-1\)个点和\(m+i-1\)棵树,于是有

\[f(n,m)=\sum_{i=0}^{n-m}{n-m\choose i}f(n-1,m+i-1)\]

根据归纳,因为对于所有\(k<n\),\(f(k,m)=mk^{k-m-1}\)恒成立,所以

\[
\begin{aligned}
f(n,m)
&=\sum_{i=0}^{n-m}{n-m\choose i}f(n-1,m+i-1)\\
&=\sum_{i=0}^{n-m}{n-m\choose i}(m+i-1)(n-1)^{n-m-i-1}\\
\end{aligned}
\]

我们把\(i\)变成\(n-m-i\),柿子变成

\[
\begin{aligned}
f(n,m)
&=\sum_{i=0}^{n-m}{n-m\choose i}(n-i-1)(n-1)^{i-1}\\
&=\sum_{i=0}^{n-m}{n-m\choose i}(n-1)(n-1)^{i-1}-\sum_{i=0}^{n-m}{n-m\choose i}i(n-1)^{i-1}\\
&=\sum_{i=0}^{n-m}{n-m\choose i}(n-1)^i-\sum_{i=0}^{n-m}{n-m\choose i}i(n-1)^{i-1}\\
\end{aligned}
\]

前面那个东西,根据二项式定理,为\(n^{n-m}\)

后面那个东西,我们把\({n-m\choose i}i\)化为\({n-m-1\choose i-1}(n-m)\)

\[
\begin{aligned}
\sum_{i=0}^{n-m}{n-m\choose i}i(n-1)^{i-1}
&=\sum_{i=0}^{n-m}{n-m-1\choose i-1}(n-m)(n-1)^{i-1}\\
&=(n-m)\sum_{i=0}^{n-m-1}{n-m-1\choose i}(n-1)^i\\
&=(n-m)n^{n-m-1}
\end{aligned}
\]

代入柿子即可

定理拓展

\(n\)个带权的点,边的权值为连接两点点权之积,树的权值为所有边权值之积,求所有树的权值之和

令\(i\)的度数为\(d_i\),权值为\(val_i\),则一棵树的权值即为

\[\prod_{i=1}^n{val_i}^{d_i}\]

考虑\(Prufer\)序列,每个点恰出现\(d_i-1\)次,那么根据乘法分配律,答案为

\[\left(\prod_{i=1}^n{val_i}\right)\left(\sum_{i=1}^nval_i\right)^{n-2}\]

这个东西似乎包含了上面的所有定理。当所有点权值为\(1\)时,就是\(Cayley's\ Formula\)。当把\(1\)到\(m\)缩成一个权值为\(m\)的点时,就是\(Generalized\ Cayley's\ Formula\)

参考资料

https://www.cnblogs.com/HocRiser/p/10390772.html

On Cayley’s Formula for Counting Forests

Prufer codes与Generalized Cayley's Formula学习笔记的更多相关文章

  1. Prufer codes与Generalized Cayley's Formula

    Prufer序列 在一棵n个节点带标号树中,我们认为度数为1的点为叶子.n个点的树的Prufer序列是经过下面流程得到的一个长度为n-2的序列. 1.若当前树中只剩下两个点,退出,否则执行2. 2.找 ...

  2. Hook length formula 学习笔记 UVALive 6625

    最近做到一个关于杨氏矩阵的题目. UVALive 6625 题目大意是用n以内的数填充杨氏矩阵,要求行严格递增,列不严格递增. 求方案数. 数据范围很小,我直接上爆搜,结果TLE了. 后来发现一位学长 ...

  3. Codeforces 1109D: generalizations of Cayley's formula证明

    做这题的时候发现题解里有提到\(generalizations\ of\ Cayley's\ formula\)的,当场懵逼,Wikipedia里也就带到了一下,没有解释怎么来的,然后下面贴了篇论文. ...

  4. A.Kaw矩阵代数初步学习笔记 5. System of Equations

    “矩阵代数初步”(Introduction to MATRIX ALGEBRA)课程由Prof. A.K.Kaw(University of South Florida)设计并讲授. PDF格式学习笔 ...

  5. A.Kaw矩阵代数初步学习笔记 4. Unary Matrix Operations

    “矩阵代数初步”(Introduction to MATRIX ALGEBRA)课程由Prof. A.K.Kaw(University of South Florida)设计并讲授. PDF格式学习笔 ...

  6. IRP IO_STACK_LOCATION 《寒江独钓》内核学习笔记(1)

    在学习内核过滤驱动的过程中,遇到了大量的涉及IRP操作的代码,这里有必要对IRP的数据结构和与之相关的API函数做一下笔记. 1. 相关阅读资料 <深入解析 windows 操作系统(第4版,中 ...

  7. Requests:Python HTTP Module学习笔记(一)(转)

    Requests:Python HTTP Module学习笔记(一) 在学习用python写爬虫的时候用到了Requests这个Http网络库,这个库简单好用并且功能强大,完全可以代替python的标 ...

  8. Web Service学习笔记(webservice、soap、wsdl、jws详细分析)

    Web Service概述 Web Service的定义 W3C组织对其的定义如下,它是一个软件系统,为了支持跨网络的机器间相互操作交互而设计.Web Service服务通常被定义为一组模块化的API ...

  9. Web Service学习笔记

    Web Service概述 Web Service的定义 W3C组织对其的定义如下,它是一个软件系统,为了支持跨网络的机器间相互操作交互而设计.Web Service服务通常被定义为一组模块化的API ...

随机推荐

  1. ubuntu安装rtx

    终端安装RTX sudo apt-get install wine 安装wine下的window扩展包安装工具winetricks,在终端下输入: sudo wget http://winetrick ...

  2. Thymeleaf 表达式工具类

    Thymeleaf默认提供了丰富的表达式工具类,这里列举一些常用的工具类. Objects工具类 1 2 3 4 5 6 7 8 /* * 当obj不为空时,返回obj,否则返回default默认值 ...

  3. python 把txt文件分隔成0.8和0.2的比例的新文件

    from math import sqrt import randomimport osfrom sklearn import cross_validation os.chdir("/*&q ...

  4. go_封装

    go语言中首字母大写表示public go语言中首字母小写表示private 结构定义的方法必须放在同一个包内 一个目录只能放一个包 如何扩充系统的类型或别人的类型: 1.定义别名 2.使用组合 使用 ...

  5. javascript+php实现根据用户时区显示当地时间的方法

    本文实例讲述了javascript+php实现根据用户时区显示当地时间的方法.分享给大家供大家参考.具体如下: 在跨时区应用中会用到下面代码,这是以前写的一段代码. 服务器保存相关时间配置,保存形式为 ...

  6. 第六章 Windows应用程序对键盘与鼠标的响应 P121 6-8

    基于键盘与鼠标应用的程序设计 一.实验目的 1.掌握键盘与鼠标在应用程序中的消息响应机制.   二.实验内容及步骤 实验任务 1.熟悉键盘的消息响应: 2.熟悉鼠标的消息响应: 实验内容 设计一个窗口 ...

  7. [Training Video - 5] [Groovy Script Test Step - Collections, Exceptions] Exception Handling in groovy

    def x = new String[3] x[0] = "A" x[1] = "B" x[2] = "C" log.info"X ...

  8. windows聚焦图片文件重命名bash脚本

    win10聚焦路径为: %localappdata%\Packages\Microsoft.Windows.ContentDeliveryManager_cw5n1h2txyewy\LocalStat ...

  9. WAMP不能启动, 一直处于红色图标或者橙色图标的解决办法

    WAMP不能启动, 一直处于红色图标(正常启动为绿色吧) 考虑是端口的问题,我找到wamp文件夹中的wamp\bin\apache\apache2.2.22\conf路径下的httpd.conf文件, ...

  10. linux每天一小步---tail命令详解

    1 命令功能 tail命令用于显示文件中末尾的内容(默认显示最后10行内容) 2 命令语法 tail [选项参数] [文件名1] [文件名2] 3 命令参数 -f  用于循环读取文件的内容,监视文件的 ...