题目大意
在一棵树上,定义一颗子树的首领是权值最大的节点,每个节点的权值唯一并且权值为[1,n],求首领一共有k个的方案数。
题解
各种思考树形dp。然而正解是概率dp。
让我们从概率的角度考虑这个问题。
对于一棵子树,令根节点是x。
令siz[x]表示x的子树大小。
这棵子树的首领是x的概率为
1siz[x]
,而首领不是x的概率为
siz[x]−1siz[x]
,那么从1到n进行dp。
定义dp[i][j]表示处理到i这个点,并且有j个首领的概率。
推导就比较简单了:
如果x成为首领
dp[i][j]=dp[i−1][j−1]∗1siz[i]
否则
dp[i][j]=dp[i−1][j]∗siz[i]−1siz[i]
对于除法,就利用逆元。
边界就是
dp[0][0]=1
。
由于题目求的是方案数,所以答案就是
dp[n][k]∗n!
总结
这题真是概率dp的神题啊!
完全没有看出来。