树上倍增

rgw20104 个月前
数据结构·动态规划·树上倍增·主席树·树链剖分·前缀优化
P10789 [NOI2024] 登山我们可以对于每个 \(i\) 找到它能跳到的最远的点和最近的点,倍增求一下 \(k\) 级祖先即可,令 \([l_i,r_i]\) 新表示 \(i\) 能跳到其祖先中深度在 \([l_i,r_i]\) 内的点;同时令 \(lim_i = d_i - h_i-1\) 表示 \(i\) 至少要跳到 \(lim_i\) 的深度。
闻缺陷则喜何志丹10 个月前
c++·深度优先·图论··树上倍增·并集查找·换根法
【树上倍增】【割点】 【换根法】3067. 在带权树网络中统计可连接服务器对数目视频算法专题树上倍增 树 图论 并集查找 换根法 深度优先 割点给你一棵无根带权树,树中总共有 n 个节点,分别表示 n 个服务器,服务器从 0 到 n - 1 编号。同时给你一个数组 edges ,其中 edges[i] = [ai, bi, weighti] 表示节点 ai 和 bi 之间有一条双向边,边的权值为 weighti 。再给你一个整数 signalSpeed 。 如果两个服务器 a ,b 和 c 满足以下条件,那么我们称服务器 a 和 b 是通过服务器 c 可连接的 : a < b ,a
小威W1 年前
算法···lca·倍增·树上倍增·最近公共祖先
【算法】树上倍增 & LCA把相关链接放在最前面是因为,周赛遇到了几次,不会做。这才想起来学一下这个算法。【力扣周赛】第 360 场周赛(⭐树上倍增) 【力扣周赛】第 361 场周赛(⭐树上倍增、LCA)
xhchen20231 年前
c++·算法·leetcode·dfs·树上倍增
最近公共祖先 (LCA) 模板在树中两个节点的最近公共祖先为:两个点的公共祖先里面离根最远的那个。可以通过两次 d f s dfs dfs 解决:第一次 d f s dfs dfs 将根节点到其中一个节点的路径上的节点染色,第一次 d f s dfs dfs 遍历到的最后一个染色节点即为最近公共祖先,时间复杂度为 O ( n ) O(n) O(n)。
xhchen20231 年前
算法·leetcode·前缀和·枚举·双指针·哈希·树上倍增
第 361 场 LeetCode 周赛题解枚举 x x x双指针:则若字符串操作完后为 0 0 0 ,设字符串长为 n n n ,则需要 n n n 或 n − 1 n-1 n−1 (字符串中含 0)操作使得字符串变为 0 0 0 , 若字符串操作完后至少有两位数字,则其最后两位只能是 { 25 , 50 , 75 , 00 } \{25, 50, 75, 00\} {25,50,75,00} 其中之一,枚举可能的后两位,用双指针计算要得到当前枚举值的最少操作数