Skip to content

【有后效性 DP】CF1823F Random Walk 笔记 ​

两种思路都想到了,但是两种做法都没想出来。

做法一 ​

模拟一下这个随机游走的过程,当他走错路的时候,他一定会走回头路,不然就不一定。

但是这个好像不好 DP,因为点和点的状态之间关联不大。

打开题解,发现可以考虑一条边的经过次数,由于每个点出发选择任意一条边的概率相同,因此一个点的所有出边经过的期望次数相同,设这个期望次数是 fu,如果这条边 u→v 在 s→t 路径上,那么他一定会比走 v→u 的次数多一次,因此 fu←fv+1,否则,进入 v 的子树后一定会再从 v→u 里走出来,因此 fu←fv,只需要两次 DFS 即可求解,最终的答案是 fu×degu,时间复杂度 O(n),空间复杂度 O(n)。

做法二 ​

随机游走……这不是我们有后效性 DP 高斯消元求解吗?

不好孩子们是 n≤2×105……n3 被击毙了。

但是现在是在树上,所以对于 DP 方程

ft=1,fu=[u=S]+∑(u,v)∈E∧v≠tfvdegv

我们可以寻找更多性质。

考虑这个转移比树形 DP 多了什么,正常的树形 DP 是 fv=kvfu+bv,即只和自己与自己的儿子有关,现在这个 DP 方程多了一个从父亲 fa 转移,我们考虑把他转换成正常形式。

fu=[u=S]+∑(u,v)∈E∧v≠tfvdegvfu=[u=S]+ffadegfa+∑v∈sonu∧v≠tkvfu+bvdegvfu=[u=S]+ffadegfa+fu×∑v∈sonu∧v≠tkvdegv+∑v∈sonu∧v≠tbvdegv(1−∑v∈sonu∧v≠tkvdegv)fu=[u=S]+ffadegfa+∑v∈sonu∧v≠tbvdegvfu=1(1−∑v∈sonu∧v≠tkvdegv)×degfa×ffa+1(1−∑v∈sonu∧v≠tkvdegv)×([u=S]+∑v∈sonu∧v≠tbvdegv)

令 ku 为红色的部分,bu 为蓝色的部分,发现 k,b 都是正常的树形 DP 可求,接着 f 也变成正常的树形 DP 了,时间复杂度 O(nlog⁡n),空间复杂度 O(n)。

最近更新