引入
题目大意:给一棵 \(N\) 个点、有边权的树,求最小的不小于k的一条树上路径的长度。
我的第一想法肯定是把每个节点的的信息不断像上传,同时还在这个节点的位置处理子树中到它和跨过它的路径的信息,但这样的复杂度是最坏 \(\Theta(N^2)\) 的,只需要用一条链就可以轻松卡掉它。。。
看一眼数据范围,典型的要带一两个 \(log\) 那怎么办,就引出我们的主题了:
树上启发式合并(dsu on tree)
这玩意乍一看很玄学,因为启发式就显得它很难懂,也很高大上,但事实上你只需要感性理解一下,放轻松~
回忆一下重链剖分中,对于一棵树的一个节点,从根节点到它的轻边数是不超过 \(log N\) 的[1]
证明:设 \(x\) 为根节点到该节点的轻边数, \(y\) 为该节点的子树大小,那么因为轻边连接的子树最大不大于它的父节点的子树大小的一半,所以有 \(y<=\cfrac{N}{2^x}\) , ↩︎