参考资料:

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. ASP.NET给前端动态添加修改 CSS样式JS 标题 关键字(转载)

    原文地址:http://www.cnblogs.com/xbhp/p/6392225.html 有很多网站读者能换自己喜欢的样式,还有一些网站想多站点共享后端代码而只动前段样式,可以采用动态替换CSS ...

  2. 解决phpmyadmin数据文件导入有限制的问题(只能导入2M以下)

    修改配置php.ini文件中三个参数: 1.upload_max_filesize 2.memory_limit 3.post_max_size 建议根据实际需要进行设置.

  3. 慕课网6-4 编程练习:jQuery选择器中的过滤器

    6-4 编程练习 结合所学的jQuery过滤器知识,实现如下图所示的隔行换色效果 任务 使用jQuery的.css()方法设置样式,语法css('属性 '属性值') 使用:odd和:even过滤器实现 ...

  4. jQuery——表单应用(1)

    实现结果:聚焦表单的input部分时,input格式变更为CSS样式(获取和失去焦点改变样式) HTML: <!DOCTYPE html> <html> <head> ...

  5. [Qt Quick入门] 基本元素初体验

    Qt Quick作为QML语言的标准库,提供了很多基本元素和控件来帮助我们构建Qt Quick应用.这节我们简要地介绍一些Qt Quick元素,如Rectangle.Item.Text.Button. ...

  6. [Qt及Qt Quick开发实战精解] 第1章 多文档编辑器

      这一章的例子是对<Qt Creator快速人门>基础应用篇各章节知识的综合应用, 也是一个规范的实例程序.之所以说其规范,是因为在这个程序中,我们对菜单什么时候可用/什么时候不可用.关 ...

  7. 每天学点Linux命令:倒叙打印文件第二行的前100个大写字母

    sed -n | rev 处理第二行             grep:提取大写字母   o: 不显示非结果  tr:删除换行   Cut:截取1-100个字符  rev:逆序 断断续续搞了好长时间. ...

  8. [译]curl_multi_info_read

    curl_multi_info_read - read multi stack informationals读取multi stack中的信息 SYNOPSIS#include <curl/cu ...

  9. Android基础TOP5_2:MultiAutoCompleteTextView多文本自动补全文本框

    Activity: <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmln ...

  10. Magento 多站点多域名安装教程(可以设置手机模版哟,亲 \(^o^)/)

    这篇文章是安装magento子域名的教程,请先进行安装之前,确认以下几点: 1.请先确认子域名是否已经指向你的服务器 2.可以编辑.htaccess文件 3. 熟悉Cpanel操作 我们的目标是建立一 ...