
最近公共祖先(LCA)
早睡身体好_
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
POJ1330_Nearest Common Ancestors(tarjan)
本题是LCA问题的模板题,用tarjan算法来解决。#include<iostream>#include<vector>#include<cstdio>#include<string.h>using namespace std;const int maxn=10003;vector<int> son[ma...原创 2019-05-08 09:48:47 · 337 阅读 · 0 评论 -
LCA问题(DFS+ST)
LCA问题: LCA问题是指在一棵二叉树中,求出两个结点的最近公共祖先。 例如在下面这个简单的二叉树中: F和E的LCA是B; D和C的LCA是A; D和E的LCA是B; A和B的LCA是A; 这里介绍一种用ST表算法来解决此类问题的算法,不了解ST算法的可以先移步:ST算法...原创 2019-05-06 20:18:16 · 3270 阅读 · 1 评论 -
P3379 【模板】最近公共祖先(LCA优化)
题目链接:https://www.luogu.org/problemnew/show/P3379 本题是LCA的模板,LCA大概有三种解法:DFS、倍增、tarjan。如果不了解的可以先移步:DFS+ST、倍增法。tarjan并不熟悉,所以用了倍增的模板,但是我的第一次提交超时了,去网上搜了一下发现是我保存图的结构不好。我用的是简单的邻接表,但是本题的点数多达50...原创 2019-05-09 21:05:10 · 1360 阅读 · 0 评论 -
LCA问题(倍增法)
之前写过了LCA的两个在线算法之一:DFS+ST方法(DFS+ST)。本篇介绍另一种在线算法,用倍增思想来解决LCA问题。在学习倍增之前,先看一种倍增算法的退化版,有助于理解倍增法。 在找a和b的LCA时,先让a和b中深度较大的那一个,向上回溯到与另一个同样深度的位置上。例如下面这个图: 假设要找F和E的LCA,先让F向上回溯到他的父节点D的...原创 2019-05-07 20:23:32 · 10324 阅读 · 14 评论 -
HDU2586(LCA模板)
本题大意是在一个图中,求两个点之间的最短路径。这个图有n个点,n-1条边,也可以看成是一棵树。在树上求两点的最小距离,可以看作是LCA问题的延伸。LCA算法详解:倍增法、DFS+ST 本题中给的是图,我们要将这个图转化成树,首先要规定根节点就是编号为1的结点。然后在此基础上求每个结点的深度和其父节点。而两个点之间的最小距离就是:两个点分别到根节点的距离相加,再减去...原创 2019-05-07 21:13:53 · 453 阅读 · 0 评论