\(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. How To Install Spring IDE In Eclipse

    Spring IDE is a very useful graphical user interface tool adding support for Spring Framework. In th ...

  2. 迷你MVVM框架 avalonjs 1.3发布

    性能得到大幅改良的avalon1.3发布了. 修复$outer BUG 修复IE6-8下扫描加载Flash资源的OBJECT标签时,遇到它既没有innerHTML也没有getAttributeNode ...

  3. 使用 phpStorm 开发

    苦恼蛋疼的曾哥工作室,让人痛不欲生,缓慢的同步速度,另人恼火的插件配置,让人疯狂的卡.简直是让人用了几天之后就不行了. 废话不多说,一款很好的php IDE. 1. phpStorm 下载 here ...

  4. 动量Momentum梯度下降算法

    梯度下降是机器学习中用来使模型逼近真实分布的最小偏差的优化方法. 在普通的随机梯度下降和批梯度下降当中,参数的更新是按照如下公式进行的: W = W - αdW b = b - αdb 其中α是学习率 ...

  5. 寻找hash值——把int array看成是一个整数

    QUESTION: Write a class DominoChecker that has a method called addBox(int[]) that takes a box of fiv ...

  6. Oracle之SYSDBA的使用

    曾经没加名字可以创建一个表却要加名字才可以查出来,但只是偶然吧! 如果真的使用了SYSDBA,必须加名字

  7. wcf 调试

    1>在开发环境中调试,我们先在WCF服务上将服务Serivce1.svc设置为启动页面 然后在WCF上Debug中启动新实例 服务就启动起来了 2>wcf发布以后调试,只需在Visual ...

  8. ThinkCMF框架使用 - 如何创建应用 -1

    .应用就是application目录下的一个模块,它是独立于其它模块存在的,有自己独立的运行空间: .应用采用MVC的结构: .拿Blog应用举例: Blog Controller 控制器目录(必备) ...

  9. gsm

    libosmocore Osmocom-BB wireshark 拦截一个短信内容

  10. [Training Video - 3] [Java Introduction] [Object Oriented Programming]

    Static and non-Static :  非静态方法(不带static)可以访问静态变量和方法(带static),但是反过来就不行. 类的静态成员(变量和方法)属于类本身,在类加载的时候就会分 ...