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}$。

用多项式运算大概可以做到更好的复杂度,不过我没写。

 

posted @ 2024-02-05 01:14  TianyiLemon  阅读(68)  评论(0)    收藏  举报