【Topcoder 10107】TeamManagement

Topcoder 10107

题意:给定一棵树,其中有些点是忠诚的,现在要选k个点,每个选择的联通块都必须包含一个忠诚的点,求包含某个点的概率。

思路:考虑树型\(dp\)\(dp(i,j,0/1,0/1)\)表示\(i\)号节点为根的子树中选择\(j\)个,\(i\)选不选,是所有选择的联通块都是含有忠诚的点,还是只有\(i\)所在的联通块不含。状态转移方程:
\(dp(u,i+j,0,1)=dp(u,i,0,1)\times(dp(v,j,0,1)+dp(v,j,1,1))\)

\(dp(u,i+j,1,0)=dp(u,i,1,0)\times(dp(v,j,0,1)+dp(v,j,1,0))​\)

\(dp(u,i+j,1,1)=dp(u,i,1,0)\times dp(v,j,1,1)+dp(u,i,1,1)\times(dp(v,j,0,1)+dp(v,j,1,0)+dp(v,j,1,1))\)

解释:\(v\)\(u\)的儿子,\(i\)\(j\)是枚举的\(u\)\(v\)之前的儿子所构成的子树和\(v\)所挂的子树中所选的数量。为什么没有\(dp(i,j,0,0)\)?因为如果这个节点根本不选,就不可能有这个点所在的联通块。

反思:这个方程重写了几次才写对。属思路不明确。

猜你喜欢

转载自www.cnblogs.com/denverjin/p/10468045.html