[NOI2012]迷失游乐园

题解:


这题不像一般的dp题难在思维。。大概代码细节多一点吧

首先 考虑链,那么就是枚举每个点,o(n)

然后 考虑树

其实问题就是计算每个点出发的期望路径的平均值

考虑树形dp

令f[i]表示i向下走的期望路径,这个显然从根dp一次就可以了

令g[i]表示i向上走的期望路径,此时,记w[i]表示从i走的路径总和(w[i]/n=期望路径,其中n等于它的度)

这时g[i]=(w[fa[i]]-f[i]-v[fa[i],i])/(n-1)+v[fa[i],i]

这样每个点的期望路径就可以o(1)求了

再考虑环上

其实这题环上基本和树上差不多

容易发现环上只有20个点

那么令每个点代表一棵树的树根

然后o(20)枚举从哪个点伸到环中

之后分别做它逆时针走和顺时针走

到达一个新的节点的时候,我们会发现有1/n的概率继续走,这个继续dfs算就可以了

令外就是往它的子树中走

这一部分可以预处理出来

f[i]=(sigma|i=1,n-2|f[son[i]]+v[i,son[i]])/n-1

 

posted @ 2018-04-01 16:23  尹吴潇  阅读(128)  评论(0编辑  收藏  举报