P1685 游览

题意

给定一张带权有向无环图和起点、终点和数 t0t0,设从起点到终点不经过重复的边的不同的路径数量为 cc,每条路径的权值总和为 ww,求 w+(c1)×t0\sum \limits w + (c - 1) \times t01000010000 取余的结果。可能有重边。

解法

给定的是 DAG,所以可以考虑 DP。

cnticnt_i 表示起点到 ii 的路径数量,disidis_i 表示起点到 ii 的全部路径和。那么有状态转移方程:cnti=(u,i)Ecntucnt_i = \sum \limits_{(u,i) \in E} cnt_u,即所有入边的点的 cntcnt 之和。disi=(u,i)Edisu+cntuwdis_i = \sum \limits_{(u, i) \in E} dis_u + cnt_u \cdot www 为该边边权。

但是直接树上 DFS 答案是错的,应该有些点的状态还没有更新完就用这个状态更新其他节点了。所以考虑按照类似拓扑排序的思想,只有一个点入度为 00 时才用它更新其他点,复杂度 O(n+m)O(n+m)

posted @ 2022-09-12 15:43  HappyBobb  阅读(11)  评论(0)    收藏  举报  来源