@SomeBottleLeetcode每日一题 —— 3559. 给边赋权值的方案数 II 中发帖

力扣这个月真上强度了…这题也是很综合,要写对难度真的还是不小的。顺便还学习到了求 LCA(最近公共祖先)的倍增法。 

思路
看上去和昨天那道题还有点像,找的其实依旧是两个节点间的路径长度,但不同的是蹦出来一个 queries,而且其规模可能很大,线性级的 BFS 是难以接受的。 
也就是说本题的难点主要是,我们需要在 O(\log n) 级别的复杂度下找到无向树任意两点间的路径长度。 
看了提示才知道能用 LCA 算法,而进一步了解得知 O(\log n) 复杂度的求 LCA 算法有一种倍增法 (Binary Lifting)。 
最终还得写个快速幂。 
为什么能用 LCA
找到树中两个节点 u, v 的最近公共祖先 a 后,【从根节点到 u 的距离】和【从根节点到 v 的距离】都包含了【从根节点到 a 的距离】。把根节点到 u 和 v 分别的距离之和减去两份的【从根节点到 a 的距...
 
 
Back to Top