[20220314联考] 旅行

前言

无码警告!

题目

没有链接

给一棵 n 个点 m 条边的连通图,边权为 1,每个点有 di,ci 表示可以花费 ci 的代价到距离 i 不超过 di 的点,问 1 到每个点的最小花费。

1din2×105;1ci109;n1mn+50.

讲解

膜拜DD

先考虑 m=n1 的情况,考虑 Dijkstra ,我们按转移点的松弛值 dpi+ci 去松弛其它点可保证第一次松弛就是最后一次松弛,我们要做的就是优化这个过程。

直接建点分树,然后随便用点数据结构就可以找出距离当前转移点不超过 di 的未松弛的点。

这个过程我们可以按 DD 的做法,用三元组 {dpi+ci,di,i} 存储转移点。

然后我们再考虑 m 更大的时候咋做,其实还是先建一棵生成树,点分,然后对于非树边,称它们所连的点为特殊点,我们每次加三元组把它们也加上即可。

即对于关键点 j 加上 {dpi+ci,didisi,j,j},而 disi,j 显然可以 O(n(mn)) 预处理。

时间复杂度 O(n(mn)log2n)

代码

说了无码你还点开干嘛
posted @   皮皮刘  阅读(35)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· winform 绘制太阳,地球,月球 运作规律
· 上周热点回顾(3.3-3.9)
历史上的今天:
2021-03-14 [CF GYM102832L] Coordinate Paper
点击右上角即可分享
微信分享提示