摘要:最近公共祖先二 离线算法 / / include include include include include include include include include include include include typedef long long LL; typedef unsigne
阅读全文
随笔分类 - 树
摘要:LCA离线算法的应用:在带权树中求任意两点的距离。 "离线"是指求出答案之后保存起来,最后一起输出。(在一次遍历中把所有询问一次性解决。) Tarjan算法的基本步骤: 1.任选一个点作为根节点,从该点开始dfs遍历 2.遍历该点u的子树中所有节点,并标记这些点的被访问状态 3.如果v还有子树中的节
阅读全文
摘要:D. Paint the Tree 题意: 给出一棵树,有三种颜色,要求任意链上的三点的颜色是不一样的,每个点图3种颜色都有自己的花费值,问最小的花费 Solution: 显然一个点度超过2,那么这3个点颜色都不同,无解 所以度都为1,2。树退化成链。 确定了第1,2个,第3个点也唯一确定了(不和1
阅读全文
摘要:题意:给出N条父子关系,询问M条两人最近公共祖先,没有就输出 1. 分析: 用map 每个儿子映射父亲, 开始找最近的公共祖先,先找第一个人的祖先,所有祖先都标记; 然后从第二个人开始找,如果找到被标记的,就是他们最近的公共祖先,输出, 如果第二个人的祖先找完也没有找到,那就没有公共的祖先,输出 1
阅读全文
摘要:题意:已知二叉树前序和中序遍历,求后序遍历 Solution: 要求解post order(str1, str2)的话,首先不难发现,根据‘前序遍历’str1=‘根节点’+‘左子树的前序遍历’+‘右子树的前序遍历’,我可以知道这棵二叉树的根节点root便是str1的第一个字符 在知道了‘根节点’ro
阅读全文
摘要:枚举每一个点作为转折点t,求出以t为根节点的子树中的‘最长路’以及与‘最长路’不重合的‘次长路’,用这两条路的长度之和去更新答案,那么最终的答案就是这棵树的最长路长度了 用first(t),second(t)分别表示以t为根节点的子树中最长路和次长路的长度,那么我只需要求出t的所有子结点的first
阅读全文