[NFLS 1451/3] 有向图++ 题解

大意

在有向图上, 有长度为 xx 的边, 对于每个询问,给定 s,ts, t, 求出当 xx 取不同正整数时, 最短路的值有多少种, 并且求出他们的和.

题解

对原图跑分层图最短路, 记 disu,idis_{u, i} 为从 ssuu , 恰好经过 ii 条长度为 xx 的边的最短路, 在求最短路时, 令 x0x \leftarrow 0.

可以得到若干条方程 yu=ix+dist,iy_u = ix + dis_{t, i}, 枚举考虑最短路经过 ii 条长度为 xx 的边的情况, 联立所有方程, 可以得到 (设 fi=disu,if_i = dis_{u, i})

x<fjfiij,i>jxfjfiij,j<ix \lt \frac {f_j - f_i} {i - j}, i > j \newline x \ge \frac {f_j - f_i} {i - j}, j < i \newline

然后可以求出 xx 的取值范围, 对答案的贡献即为

cntcnt+hiiloi+1cnt \leftarrow cnt + hi_i - lo_i + 1 \newline

resres+i(hii+loi)(hiiloi+1)2+dist,i(hiiloi+1)res \leftarrow res + i \frac {(hi_i + lo_i)(hi_i - lo_i +1)} 2 + dis_{t, i}(hi_i - lo_i + 1) \newline

(注: 不等式中, 不能两边都取等, 否则整数值会被重复考虑. )