usaco24Jan pt1 题解
TLE 了三个点,麻了。
upd:赛时处理逆元多一个 log,现在过了。
考虑圆方树 dp。圆点表示原图上的点,方点表示新点,圆方树的根为 $1$。如果一个式子当中同时出现 $u,v$,默认 $u$ 是 $v$ 在圆方树上的父亲。
$g_{c,u}$ 代表只考虑圆点 $u$ 的子树,经过恰好 $c$ 个 $u$ 为根(就是说 $u$ 是这个环对应的方点在圆方树上的父亲)的环,回到 $u$ 的概率。
$f_u$ 代表从 $1$ 出发不经过任何 $u$ 为根的环,到达 $u$ 的概率。
另外定义辅助变量 $h_u$,如果 $u$ 是圆点,那么
$$
h_u=(1-p_u)\sum_{c\ge 0}\frac{g_{c,u}}{deg_u-[u>1]-2c}
$$
否则 $h_u=\prod_{v}h_v$。
$g_{c,u}$ 的递推式如下(其中 $v_i$ 是方点):
$$
g_{c,u}=\frac{(2-2p_u)^c c! \sum_{(v_1,v_2,\dots,v_c)}\prod_{k=1}^c h_{v_k}}{\prod_{k=0}^{c-1}(deg_u-[u>1]-2k)}
$$
其中 $\sum_{(v_1,v_2,\dots,v_c)}\prod_{k=1}^c h_{v_k}$ 可以用背包的方法计算。在圆方树上做一次自底向上的 dp 即可算出 $g$。
接下来用一次自顶向下的 dp 算出 $f$。如果 $u,v$ 都是圆点,$f_v$ 相对容易计算:
$$
f_v=f_uh_u
$$
$u$ 是方点的情况则稍微麻烦一点。令 $w$ 是 $u$ 的父亲,要算出 $h'_w$ 代表不考虑 $u$ 对应的环的情况下 $h_w$ 的值,这个可以在之前的背包上用 $O(环数)$ 的复杂度删去一个元素(其实就是多项式除法,不过不这么理解也可以,这个操作是非常直观的)。然后在环上做一个前后缀积即可求出 $h_v$ 的值。式子不列了,因为列起来比较麻烦。
接下来用如下式子算出答案即可,这个式子的含义是比较直观的。
$$
ans_u=\sum_{c\ge 0}f_ug_{c,u}(deg_u-[u>1]-2c>0?p_u:1)
$$
这个算法的时间复杂度是 $O(\sum n^2)$,其中有一个 $n$ 是包含一个点的环的最大数目,上界大概是 $\frac{n}{2}$。
用多项式运算大概可以做到更好的复杂度,不过我没写。

浙公网安备 33010602011771号