树的拓扑序

  • 定义:一棵有根树形成的任一排列 p p p,若 i i i j j j 的父亲,排列 p p p 均满足 i i i j j j 之前。更加形式化的, ∀ 1 ≤ i < j ≤ n \forall 1 \le i < j \le n ∀1i<jn p j p_j pj 均不是 p i p_i pi 的父亲。

  • 结论:设 f u f_u fu 表示以 u u u 为根时该子树的合法拓扑序的数量, s z u sz_u szu 表示子树大小,则有 f u = s z u ! ∏ s z v ∣ v ∈ s u b t r e e ( u ) f_u = \dfrac{sz_u!}{\prod sz_v \mid v \in \rm{subtree}(u)} fu=szvvsubtree(u)szu!

以下是证明:

首先考虑二叉树的情况。若以 u u u 为根,此时每颗子树内的相对顺序是确定的,只需要考虑子树间的相对顺序。故有:

f u = f v 1 × f v 2 × ( s z v 1 + s z v 2 s z v 1 ) f_u = f_{v_1} \times f_{v_2} \times \binom {sz_{v_1} + sz_{v_2}}{sz_{v_1}} fu=fv1×fv2×(szv1szv1+szv2)

若是三叉树,考虑将 v 1 v_1 v1 v 2 v_2 v2 的相对顺序先固定形成一个整体后,再考虑 v 3 v_3 v3,则可得:

f u = f v 1 × f v 2 × f v 3 × ( s z v 1 + s z v 2 s z v 1 ) × ( s z v 1 + s z v 2 + s z v 3 s z v 1 + s z v 2 ) = f v 1 × f v 2 × f v 3 × ( s z v 1 + s z v 2 + s z v 3 ) ! s z v 1 ! s z v 2 ! s z v 3 ! f_u = f_{v_1} \times f_{v_2} \times f_{v_3} \times \binom {sz_{v_1} + sz_{v_2}}{sz_{v_1}} \times \binom {sz_{v_1} + sz_{v_2} + sz_{v_3}}{sz_{v_1} + sz_{v_2}} \newline = f_{v_1} \times f_{v_2} \times f_{v_3} \times \dfrac{\left(sz_{v_1} + sz_{v_2} + sz_{v_3}\right)!}{sz_{v_1}!sz_{v_2}!sz_{v_3}!} fu=fv1×fv2×fv3×(

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值