题意
给定一张带权有向无环图和起点、终点和数 t0,设从起点到终点不经过重复的边的不同的路径数量为 c,每条路径的权值总和为 w,求 ∑w+(c−1)×t0 对 10000 取余的结果。可能有重边。
解法
给定的是 DAG,所以可以考虑 DP。
设 cnti 表示起点到 i 的路径数量,disi 表示起点到 i 的全部路径和。那么有状态转移方程:cnti=(u,i)∈E∑cntu,即所有入边的点的 cnt 之和。disi=(u,i)∈E∑disu+cntu⋅w,w 为该边边权。
但是直接树上 DFS 答案是错的,应该有些点的状态还没有更新完就用这个状态更新其他节点了。所以考虑按照类似拓扑排序的思想,只有一个点入度为 0 时才用它更新其他点,复杂度 O(n+m)。