题目
n(n<=2e3)个点的树,点i有一个初始权重ai(1<=ai<=1e9,sumai<=1e9),
表示有的概率,成为这棵树初始被感染的点,初始被感染的点恰有一个,
此外,点i还有一个被相邻节点传染的概率pi(0<=pi<=1),
即若相邻节点感染且i此时未被感染,则有pi的概率会被感染,
pi实际以bi/ci的方式给出(1<=bi<=ci<=1e9,gcd(bi,ci)=1),
对于k=1,2,..,.n,分别输出最终局面恰有k个节点被感染的概率,答案对1e9+7取模
即若答案分数为p/q,则输出p*q的逆元对1e9+7取模的值
题解
dp[i][j][k]表示仅考虑i的子树,选了j个点,选/没选初始点的概率之和
特别地,j>0时,钦定i这个点必选,因为最终答案一定是一个连通块,
记a[u]为u初始感染的概率,p[u]为u后来被传染的概率,
则如果背包选了u这个点,两种状态可以选一种,dp[i][1][1]=a[u],dp[i][1][0]=p[u],
dp[i][0][1]是不合法的状态,概率为0
dp[i][0][0]=1-p[u],如果u往上的点想不传染到u这棵子树的所有点,只需要u不被传染即可
转移考虑枚举u和v子树最终感染的点的连通块大小i(i>0)、j(j>=0),
根据第三维分三种情况,
①u没选初始点,v没选初始点,0,0转移到0
<
该博客主要讲解了一道涉及树形概率动态规划和树上背包算法的复杂概率问题。题目中,一棵树的每个节点都有初始感染概率和被相邻节点传染的概率,要求求解最终不同节点被感染数量的概率。博主通过dp数组和朴素的树上背包技巧,实现了近似O(n^2)的时间复杂度解决方案,最后输出了每个节点数量被感染的概率。
最低0.47元/天 解锁文章
2301

被折叠的 条评论
为什么被折叠?



