近日膜你赛做到了和这个核心思路类似的题……
于是就回来写了(?
考虑把图按最短路分层,则能连的边只有相邻两层的和同一层内的。
对于前一种边,对于第 i 层的任意一个点,往 i−1 层连边的生成函数为 (1+x)ti−1。
第 i 层所有点往上一层连边的生成函数即 [(1+x)ti−1]ti−1。
分治 NTT / 手动 ln exp 胡乱分析一下可以做到 O(nlog2n) / O(nlogn)(视 n,m,∑titi−1 同阶)。
考虑后一种边,则设可能的这样的边的总数为 s,有 s=n−1∑i=1(ti2)
则这部分边的生成函数是 ∑i≥0(si)xi=(1+x)s
直接多项式快速幂即可。
不过这样会慢一点,也可以像官方题解那样观察到在 smodp<i<p 时有 (si)≡0(modp),所以直接按照套路维护 si_ 即可。
代码:
1 |
|