nowcoder20037 [HNOI2004]树的计数

链接

点击跳转

题解

先判断是不是无解:无根树与 p r u f e r prufer prufer序列一一对应,所以合法的 p r u f e r prufer prufer序列存在的条件就是无根树存在的条件, p r u f e r prufer prufer序列存在的条件就是所有点的度数都大于 0 0 0而且都不大于 n − 1 n-1 n1,而且所有点的度数之和要等于 2 n − 2 2n-2 2n2

如果答案存在的话,那就用可重复排列组合公式:

a n s = ( n − 2 ) ! ∏ i = 1 n ( d i − 1 ) ! ans = \frac{(n−2)!}{\prod^n_{i=1}(d_i−1)!} ans=i=1n(di1)!(n2)!

代码

import math
n = int(input())
lis = [int(x) for x in input().split()]
if n==1:
    if lis[0]==0:
        print(1)
    else:
        print(0)
    exit(0)
tot = sum(lis) - n
if tot != n-2:
    print(0)
    exit(0)
ans = math.factorial(n-2)
for d in lis:
    if d<=0 or d>n-1:
        print(0)
        exit(0)
    ans //= math.factorial(d-1)
print(ans)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值