Prufer数列

若如初见. 提交于 2020-04-08 04:43:09

0 导语

Prufer数列是无根树的一种数列。构造简单,具有很优秀的性质。Prufer数列是生成树计数的一个巧妙工具。

1 介绍

1.1 从树到Prufer数列

一棵n个有编号节点的无根树对应唯一的一串长度为n-2的Prufer数列。而我们可以用迭代删点的方式生成Prufer数列。

定义无向连通图\(G=(V,E)\)\(|V|=|E|+1\)。我们定义叶子节点为度数为1的节点。然后按以下步骤:

  1. 找到一个节点\(u\in V\),满足\(deg_u=1\)的最小的\(u\),记下\(u\)和边\((u,v)\in E\)

  2. 在Prufer数列中加入节点\(v\in V\),在原图中删去\(u\)和边\((u,v)\)

  3. 如果\(|V|=2\)则停止,否则重复1,2。

img

比如上图

  1. 找到5,在数列中加入2,删除5及其连边

  2. 找到6,在数列中加入2,删除6及其连边

  3. 找到7,在数列中加入3,删除7及其连边

  4. 找到2,在数列中加入1,删除2及其连边

  5. 找到3,在数列中加入1,删除3及其连边

结束,得到数列[2,2,3,1,1]。

1.2 从Prufer数列到树

​ 一串长度为n-2的Prufer数列对应唯一的一棵n个有编号节点的无根树。

  1. 取出Prufer数列最前面的元素\(u\),删除\(u\)

  2. 在点集\(V\)中找到最小的没有在Prufer数列中出现的元素\(v\)。节点\(v\in V\),连接边\((u,v)\). 在\(V\)中删除\((u,v)\)

  3. 如果\(|V|=2\)则将剩余的两个点连边后停止,否则重复1,2。

举例省略。

1.3 性质们

Prufer数列具有许多优秀的性质。

  1. Prufer数列中某个编号出现的次数+1等于该编号节点在无根树中的度数。因为某个编号\(p\)出现一次,就代表有一个连向\(p\)的点。而且必然还存在一个连向\(p\)的点,来让\(p\)从点集中消失。

  2. 唯一性。一个Prufer数列和一棵无根树是互相唯一对应的。

  3. Caylay公式:对于一张完全图\(G=(V,E)\)\(|V|=n\)。则该图生成树个数为\(n^{n-2}\)。完全图中,每个点的度数均为n-1。则Prufer数列中一个点出现次数至多为n-2。又由于该Prufer数列长度为n-2,所以每一个位置都有n种可能。所以该图生成树个数为\(n^{n-2}\)

2 实例

2.1 Caylay公式推广

对于未给定的无向连通图\(G=(V,E)\),已知\(|V|\),且\(|V|=|E|+1\),节点两两不同(看做有编号)。已知节点\(u\in V\)的度\(deg_u\)。求满足条件的\(G\)有多少种。

解答:显然无向图\(G\)是一棵树。既然已知点度,我们可以想到性质1.

因为节点\(u\in V\)的度为\(deg_u\),则\(u\)\(G\)所对应的Prufer数列中出现的次数为\(deg_u-1\)

那么问题转化为,对于数集\(A={1,2,3,...,n}\),定义\(f(x)\)为对\(x\in\)在数列中出现次数。求数列B的方案数,满足\(\forall x\in B,f(x)=deg_x\)

​ 方案数为\(C_{n-2}^{deg_1-1}\times C_{n-2-(deg_1-1)}^{deg_2-1}\times ...\times C_{n-2-(deg_1-1+deg_2-1+...+deg_{n-1}-1)}^{deg_n-1}\)

\[\frac{(n-2)!}{\prod_{i=1}^{n}(deg_{i}-1)!} \]
2.2 [BZOJ1005]明明的烦恼

​ 自从明明学了树的结构,就对奇怪的树产生了兴趣......给出标号为1到n的点\((n\le 1000)\),以及某些点最终的度数,允许在任意两点间连线,可产生多少棵度数满足要求的树?

​ 解答:我们将点分成两部分:有规定度数的点和未规定度数的点。然后两部分分别构造生成树。

​ 令有规定度数的点有\(k\)个,将有规定度数的点做完后无根树对应的Prufer数列剩余位置为\(l\)。则\(l=n-2-\sum_{i=1}^{k}(deg_i-1)\)

有规定度数的部分同2.1,即

\[C_{n-2}^{deg_1-1}\times C_{n-2-(deg_1-1)}^{deg_2-1}\times ...\times C_{n-2-(deg_1-1+deg_2-1+...+deg_{k-1}-1)}^{deg_k-1} \]

未规定度数的点当成完全图求生成树处理,即

\[(n-k)^l \]

二者相乘,得

\[\frac{(n-2)!}{\prod_{i=1}^{n}{(deg_{i}-1)!}\times l!}\times(n-k)^l \]
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!