注意:
- 高精度!
实现树的Prufer编码
Prufer编码是用另外一种形式来描述一棵树,这棵树是无根树,它可以和无根树之间形成一一对应关系。已知树,如何求Prufer编码?
首先选这棵树叶子中编号最小的点,将这个点删除,并且把它的邻接点加入一个数组中,例如第一个删除的节点为

例如上图是一棵无根树,这棵树的Prufer编码为
将Prufer编码还原为一棵树
假如Prufer编码为
然后取不在数组中的最小值为
Prufer编码的性质
Cayley 定理:不同的
任意一棵
例题:[HNOI2008]明明的烦恼
题目描述
自从明明学了树的结构,就对奇怪的树产生了兴趣……给出标号为
输入格式
第一行为-1
输出格式
一个整数,表示不同的满足要求的树的个数,无解输出0
输入
1 | 3 |
输出
1 | 2 |
说明/提示
两棵树分别为1-2-3;1-3-2
题目分析
该题需要将树转化为prufer编码:
则有度数的点出现次数为:
所以要求在
在
插第二个节点的方法有
…………
另外还有
根据乘法原理:
然后就要高精度了……但高精度除法太麻烦了,显而易见的排列组合一定是整数,所以可以进行质因数分解,再做一下相加减。
关于
若
所以
代码详见Code
Related Issues not found
Please contact @lolifamily to initialize the comment