E
考虑使用 $\rm bfs$。
观察到每一步的代价都是 $0$ 或 $1$,于是建立双端队列。每次迭代取队头,如果走了代价为 $0$ 的边就将出点加入队首,否则加入队尾。
考虑其正确性,因为走代价为 $0$ 的边不会增加当前点的答案,所以可以维护住当前取出的点一定是答案最小点的性质。
时间复杂度 $\Theta(nm)$。
另外,这种模型还可拓展到代价为 $0 \sim k$,只需要对每种贡献维护一个队列即可,容易发现仍然满足单调性。时间复杂度 $\Theta(nk)$。
G
考虑使用状压 $\rm DP$。
设 $f_S$ 表示仅考虑 $S$ 的导出子图,令它与 $1$ 连通的方案数。设 $cnt_S$ 表示 $S$ 导出子图中的边数,显然有:
$$ans_k = \sum _ {1, k \in S} f_S \times 2 ^ {cnt_{U-S}}
$$
考虑容斥求解 $f_S$,有:
$$f_S = 2 ^ {cnt_S} - \sum _ {1 \in T, T \subsetneq S} f_T \times 2 ^ {cnt_{S - T}}
$$
求解两部分的时间复杂度分别为 $\Theta(n ^ 2 2 ^ n)$ 和 $\Theta(3 ^ n)$。
另外,后半部分可以使用 $\rm FWT$ 优化或卷积做到 $\Theta(n ^ 2 2 ^ n)$。
H
考虑 $\rm DP$。设 $f_{i, j}$ 表示到 $i$ 为止经过长度为 $j$ 的路径的方案数,记 $E_{u, v, w}$ 表示从 $u$ 到 $v$ 长度为 $w$ 的路径数量。显然有转移方程:
$$f_{i, j} = \sum _ {k = 1} ^ n \sum _ {l = 1} ^ T f_{k, j - l} \times E_{k, i, l}
$$
考虑用 $\rm GF$ 拟合这个过程,设 $F_i(x) = \sum \limits_{j} f_{i, j} x ^ j$,$G_{i, j}(x) = \sum \limits_ {k \geqslant 1} E_{i, j, k} x ^ k.$ 有方程:
$$F_i(x) = \sum _ {j = 1} ^ n F_j(x) \times G_{j, i}(x)
$$
使用分治多项式乘法即可,时间复杂度 $\Theta(n ^ 2 T \log ^ 2 T)$。
Code Link