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 @   HappyBobb  阅读(3)  评论(0编辑  收藏  举报  
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示