0 导语
Prufer数列是无根树的一种数列。构造简单,具有很优秀的性质。Prufer数列是生成树计数的一个巧妙工具。
1 介绍
1.1 从树到Prufer数列
一棵n个有编号节点的无根树对应唯一的一串长度为n-2的Prufer数列。而我们可以用迭代删点的方式生成Prufer数列。
定义无向连通图\(G=(V,E)\),\(|V|=|E|+1\)。我们定义叶子节点为度数为1的节点。然后按以下步骤:
-
找到一个节点\(u\in V\),满足\(deg_u=1\)的最小的\(u\),记下\(u\)和边\((u,v)\in E\)。
-
在Prufer数列中加入节点\(v\in V\),在原图中删去\(u\)和边\((u,v)\)。
-
如果\(|V|=2\)则停止,否则重复1,2。
比如上图
-
找到5,在数列中加入2,删除5及其连边
-
找到6,在数列中加入2,删除6及其连边
-
找到7,在数列中加入3,删除7及其连边
-
找到2,在数列中加入1,删除2及其连边
-
找到3,在数列中加入1,删除3及其连边
结束,得到数列[2,2,3,1,1]。
1.2 从Prufer数列到树
一串长度为n-2的Prufer数列对应唯一的一棵n个有编号节点的无根树。
-
取出Prufer数列最前面的元素\(u\),删除\(u\)。
-
在点集\(V\)中找到最小的没有在Prufer数列中出现的元素\(v\)。节点\(v\in V\),连接边\((u,v)\). 在\(V\)中删除\((u,v)\)。
-
如果\(|V|=2\)则将剩余的两个点连边后停止,否则重复1,2。
举例省略。
1.3 性质们
Prufer数列具有许多优秀的性质。
-
Prufer数列中某个编号出现的次数+1等于该编号节点在无根树中的度数。因为某个编号\(p\)出现一次,就代表有一个连向\(p\)的点。而且必然还存在一个连向\(p\)的点,来让\(p\)从点集中消失。
-
唯一性。一个Prufer数列和一棵无根树是互相唯一对应的。
-
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}\)
即
2.2 [BZOJ1005]明明的烦恼
自从明明学了树的结构,就对奇怪的树产生了兴趣......给出标号为1到n的点\((n\le 1000)\),以及某些点最终的度数,允许在任意两点间连线,可产生多少棵度数满足要求的树?
解答:我们将点分成两部分:有规定度数的点和未规定度数的点。然后两部分分别构造生成树。
令有规定度数的点有\(k\)个,将有规定度数的点做完后无根树对应的Prufer数列剩余位置为\(l\)。则\(l=n-2-\sum_{i=1}^{k}(deg_i-1)\)
有规定度数的部分同2.1,即
未规定度数的点当成完全图求生成树处理,即
二者相乘,得
来源:https://www.cnblogs.com/sleepiest/p/Prufer.html