参考资料:

1.matrix67 《经典证明:Prüfer编码与Cayley公式》

2.百度百科

3.Forget_forever prufer序列总结

4.维基百科

5.dirge的学习笔记

一、Cayley定理

我们先讲讲Cayley公式/定理?。

凯莱定理,是所有群 G 同构于在 G 上的对称群的子群。

什么鬼?!

其实定理还有另一种表述:过n个有标志顶点的树的数目等于n^(n-2),也即完全图K_n有n^(n-2)棵生成树。

此定理说明用n-1条边将n个一致的顶点连接起来的连通图的个数为n^(n-2),也可以这样理解,将n个城市连接起来的树状公路网络有n^(n-2)种方案。所谓树状,指的是用n-1条边将n个顶点构成一个连通图。当然,建造一个树状的公路网络将n个城市连接起来,应求其中长度最短、造价最省的一种,或效益最大的一种。Cayley定理只是说明可能方案的数目。

matrix67给出的用Prüfer序列证明Cayley定理的方式,第一步就是将树转换为Prüfer序列。

第一步:一种生成Prufer序列的方法是迭代删点,直到原图仅剩两个点。对于一棵顶点已经经过编号的树T,顶点的编号为{1,2,...,n},在第i步时,移去所有叶子节点(度为1的顶点)中标号最小的顶点和相连的边,并把与它相邻的点的编号加入Prufer序列中,重复以上步骤直到原图仅剩2个顶点。

摘自百度的例子:

例子
Prufer数列

以右边的树为例子,首先在所有叶子节点中编号最小的点是2,和它相邻的点的编号是3,将3加入序列并删除编号为2的点。接下来删除的点是4,5被加入序列,然后删除5,1被加入序列,1被删除,3被加入序列,此时原图仅剩两个点(即3和6),Prufer序列构建完成,为{3,5,1,3}。

 
由以上的过程,可以发现任何节点数为n的树(n>2),都唯一地对应了一个长度为n-2的Prüfer序列。
现在考虑此过程的逆,也即任何一个长度为n-2的序列,取值范围为[1,n],都唯一地对应了一个n个节点的树。
逆过程可以这样描述:设{a1,a2,..an-2}为一棵有n个节点的树的Prufer序列,另建一个集合G含有元素{1..n},找出集合中最小的未在Prufer序列中出现过的数,将该点与Prufer序列中首项连一条边,并将该点和Prufer序列首项删除,重复操作n-2次,将集合中剩余的两个点之间连边即可。
 
因而,我们的Prüfer编码和无根树也就形成了一一对应的关系,Cayley公式不证自明~。
 
 
 

二、Prüfer序列和cayley定理的推广和应用

1.(前言)有了这个好东西,我们可以直接得出n个点无向完全图的生成树计数。同时地,生成树问题就可以通过这一过程转化为排列组合问题了。

2.(推广1)Prüfer序列的性质:序列中某个编号的出现次数和此节点在无根树中的度数-1。这是不证自明的,看看步骤中的操作和最后仅剩2个点就停止的限定就可以简单得出了,是举不出反例的(不懂证明._.)。

3.(推广2)一个有趣的推广是,n个节点的度依次为D1, D2, …, Dn的无根树共有(n-2)! / [ (D1-1)!(D2-1)!..(Dn-1)! ]个,因为根据推广1此时Prüfer编码中的数字i恰好出现Di-1次。即n种元素,共n-2个位置来生成一个Prüfer序列(当然同时就生成了一棵与之对应的树),其中第i种元素有di-1个,求排列数。也就是将n-2个元素全排列后去重一下,这就是对公式中分母分子的理解了。

4.(来自bzoj1005明明的烦恼)n个节点的度依次为D1,D2...Dk,令有m个节点度数未知,求生成树计数。记已知点i个度数为di,有n个节点,m个未知数,那么剩下的游离度(我自己yy出的名词)为left=(n-2)-(d1-1)-(d2-1)-...-(dk-1)。有了之前巨大武器,可以简单地从一个组合推到一棵树,那么已知度数的节点可能的组合方式是:(n-2)!/[(d1-1)!(d2-1)!...(dk-1)!left!],那么此时剩下的left个可以用未知度数的节点随意填补,方案数为m^left(说明:即当前剩下了m个节点,考虑left个游离度的每一个度,与之一一对应的有m种情况,也就是left个关卡,每个关卡有m个选择咯)。最后得出ans=(n-2)!/(d1-1)!/(d2-1)!/.../(dk-1)!/left! * m^left

附:对这题,网上做法不一,一般是生成个质数表+暴力分解质因数+高精度来解决。

具体代码看我的博文吧,其实网上也很多

Prüfer序列和cayley定理的更多相关文章

  1. @总结 - 7@ 生成树计数 —— matrix - tree 定理(矩阵树定理)与 prüfer 序列

    目录 @0 - 参考资料@ @0.5 - 你所需要了解的线性代数知识@ @1 - 矩阵树定理主体@ @证明 part - 1@ @证明 part - 2@ @证明 part - 3@ @证明 part ...

  2. 树的计数 + prufer序列与Cayley公式(转载)

    原文出处:https://www.cnblogs.com/dirge/p/5503289.html 树的计数 + prufer序列与Cayley公式 学习笔记(转载) 首先是 Martrix67 的博 ...

  3. prufer编码 cayley定理

    背景(在codeforces 917D 报废后,看题解时听闻了这两个玩意儿.实际上917D与之“木有关西”,也可以认为是利用了prufer的一些思路.) 一棵标号树的Pufer编码规则如下:找到标号最 ...

  4. 树的计数 Prüfer编码与Cayley公式 学习笔记

    最近学习了Prüfer编码与Cayley公式,这两个强力的工具一般用于解决树的计数问题.现在博主只能学到浅层的内容,只会用不会证明. 推荐博客:https://blog.csdn.net/moreja ...

  5. 偶然遇见:Cayley定理

    看到\(purfer\)序列板子后,想到这个名词在哪见过,于是找到了一个题,还带出一个: \(T1\). 题目链接:P4430 小猴打架 开始极其懵逼,考虑过大力容斥,但还是失败了,原来是: Cayl ...

  6. Cayley 定理与扩展 Cayley 定理

    Cayley 定理 节点个数为 \(n\) 的无根标号树的个数为 \(n^{n−2}\) . 这个结论在很多计数类题目中出现,要证明它首先需要了解 \(\text{Prufer}\) 序列的相关内容. ...

  7. Nyoj 星际之门(一)(Cayley定理)

    描述 公元3000年,子虚帝国统领着N个星系,原先它们是靠近光束飞船来进行旅行的,近来,X博士发明了星际之门,它利用虫洞技术,一条虫洞可以连通任意的两个星系,使人们不必再待待便可立刻到达目的地. 帝国 ...

  8. Codeforces1113F. Sasha and Interesting Fact from Graph Theory(组合数学 计数 广义Cayley定理)

    题目链接:传送门 思路: 计数.树的结构和边权的计数可以分开讨论. ①假设从a到b的路径上有e条边,那么路径上就有e-1个点.构造这条路径上的点有$A_{n-2}^{e-1}$种方案: ②这条路径的权 ...

  9. 图论:Prufer编码-Cayley定理

    BZOJ1430:运用Cayley定理解决树的形态统计问题 由Prufer编码可以引申出来一个定理:Cayley 内容是不同的n结点标号的树的数量为n^(n-2) 换一种说法就是一棵无根树,当知道结点 ...

随机推荐

  1. E20170610-hm

    presence  n. 出席; 仪表; 风度; 鬼魂,神灵; defence   n. 防御; 辩护; 防御工事; 后卫; phyle  n. 种族,宗族; race  n. 赛跑; 民族; 人种; ...

  2. Moco模拟服务器post&get请求 (二)

    1.moco启动命令如下:java -jar moco-runner-0.12.0-standalone.jar 协议类型 -p 端口号 -c json配置文件 2.带参数的get请求 [ { &qu ...

  3. Linux学习之01_基础命令介绍

    初学Linux,还在摸索中,在这个过程中希望能记录下学习到的东西,参考的的书籍为<鸟哥的Linux私房菜> 在这里学到的主要命令有这几个: data cal bc man shutdown ...

  4. LOJ#120. 持久化序列(FHQ Treap)

    题面 传送门 题解 可持久化\(Treap\)搞一搞 //minamoto #include<bits/stdc++.h> #define R register #define inlin ...

  5. 实现grep命令

    #include <stdio.h> #include <string.h> #include <stdlib.h> // grep命令:grep match_pa ...

  6. 为WebSphere Application Server v8.5安装并配置JDK7

    IBM WebSphere Application Server v8.5可以同时支持不同版本的JDK共存,并且可以通过命令设置概要文件所使用的JDK版本.WAS8.5默认安装JDK6,如果要使用JD ...

  7. 百度AI车牌识别测试

    测试背景 百度已发布诸多AI应用,其中包含车牌识别,免费使用量是200次/日.付费的话,按月调用次数在20万次到50万次之间,每日10000次,月费用为0.0035*300000=1050元. 详见: ...

  8. Web应用程序的安全性问题依其存在的形势划分,种类繁多,这里不准备介绍所有的,只介绍常见的一些。

    Web应用程序的安全性问题依其存在的形势划分,种类繁多,这里不准备介绍所有的,只介绍常见的一些.  常见Web应用安全问题安全性问题的列表: 1.跨站脚本攻击(CSS or XSS, Cross Si ...

  9. windows系统下的redis启动教程

    下载解压后配置redis.conf文件配置端口号和密码,打开poweshell命令,进入redis解压目录,使用.\redis-server.exe redis.conf 命令启动redis服务,再打 ...

  10. getBlockTable delete pline

    AcDbBlockTable *pBlkTab; Acad::ErrorStatus es = acdbHostApplicationServices()->workingDatabase() ...