bzoj1211

题目链接:bzoj1211 题意: 给你一个n个点,以及每个点的度数,求他们构成的树的个数。 N<=150 题解: 这道题要用到一个东西,叫prufer序列,它可以唯一表示一棵树,树也有唯一的prufer序列,它的构造和还原,是这样的。 构造:选取编号最小的叶子节点删掉,并将它的父亲加入到prufer数列中,直到树上还有两个节点。假设一个点入度为d,它最多有可能在pruf
摘要由CSDN通过智能技术生成

题目链接:bzoj1211
题意:
给你一个n个点,以及每个点的度数,求他们构成的树的个数。
N<=150
题解:
这道题要用到一个东西,叫prufer序列,它可以唯一表示一棵树,树也有唯一的prufer序列,它的构造和还原,是这样的。
构造:选取编号最小的叶子节点删掉,并将它的父亲加入到prufer数列中,直到树上还有两个节点。假设一个点入度为d,它最多有可能在prufer上出现(d-1)次(普通节点不可能因为父亲出现在prufer上,根节点由于prufer构造时要留两个点所以也会有一个儿子无法使它出现在prufer上) ,所以一共有n-2个数字出现在prufer上,其中每个相同数字出现d-1次。
还原:由 prufer 得到一棵树,先将所有编号为 1 到 n 的点的度赋初值为 1,然后加上它在 prufer中出现的次数,得到每个点的度
先执行 n-2 步,每一步,选取具有最小标号的度为 1 的点 u 与 purfer 中的第 i 个数 v 表示的顶点相连,得到树中的一条边,并将 u 和 v 的度减一,最后再把剩下的两个度为 1 的点连边,加入到树中。
我们由前面可以知道,每个i在prufer里面出现了(d[i]-1)次,我们可以求这些数的排列方式有多少种,便可以知道有多少种树了。
于是我要求的便是 (n-2)!/(d[1]-1)!……(d[i]-1)!,(i在prufer中出现)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值