00:00 / 01:39
连播
清屏
智能
倍速
点赞2288
00:00 / 00:53
连播
清屏
智能
倍速
点赞101
数据结构 并查集 连通性 题目背景:爬山 #数据结构 #并查集 #双指针 #连通性 #题目背景:爬山 题目是说有 n 座山,每座山都有一个高度 hi,然后有 m 条边,每条边连接两座山,如果从 第 i 座山到 第 j 座山,会花费 hj - hi 单位的能量,但是如果剩余能量的值,严格小于 hj - hi 的话,是过不去的,特别的,如果 hj - hi 的值是个负数,那么会回复 |hj - hi| 的能量。然后现在给你 q 个查询,每次询问,如果一开始有 e 的能量,能不能从 a 到 b。 思路描述: 这道题用到了常用的 离线处理 技巧,至于什么时候可能会使用这种技巧,“当题目中存在大量查询操作,且查询依赖于一些静态数据(或可预先处理的数据)时,通过离线处理可以将查询与数据按特定规则排序,避免重复计算或优化查询效率”,好吧,这是我搜到的一个总结,还算有道理。 假设现在从 i 到 j ,中间经过 k,那么能量消耗的计算可以表示为 hk - hi + hj - hk == hj - hi,就算是中间再经过几座别的山,如果起点和终点不发生改变,那么最终的能量的消耗依旧是 hj - hi,当然,此时我们假设中间的山都能过得去,这里好像没有假设 hj - hi 大于等于 0 的必要,题目中的意思,也大概说明了,就是消耗一个负数等于回复同绝对值的正数。 所以,至于能不能到达,主要取决于一开始所具有的能量够不够多,如果说不够多,肯定是过不去的,至于边的意义,主要是看这个连通性了,对于连通性问题,一般就是落在并查集身上了,所以里面用了并查集。 根据一开始所具有的能量的多少,还是可以表现出一定的二段性的,随着一开始携带的能量的增多,那么其所能到达的地方也相应的只增不减,所以不妨将 边 和 查询 都分别存储下来,然后对能量这一数值,进行一个排序,然后离线操作,最后输出答案就好了。 b站上的文字描述更多一些,好,就这样。
00:00 / 06:08
连播
清屏
智能
倍速
点赞3
00:00 / 11:47
连播
清屏
智能
倍速
点赞9
00:00 / 00:15
连播
清屏
智能
倍速
点赞7
00:00 / 02:17
连播
清屏
智能
倍速
点赞14
00:00 / 02:19
连播
清屏
智能
倍速
点赞4