LCA算法
Wuliwuliii
谁无暴风劲雨时,守得云开见日明!
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
1830 路径交【LCA+线段树】
题目链接 51 nod 1830 路径交 首先,理解一下题意,题目是给出一棵N个点的树,然后给出M条边,接着Q次询问,每次询问M条边中的第L条边到第R条边中有多长的边是与每条边都有交集的,记住是第L条到第R条的每一条都要交,而不是只要两两有交集就可以了。 理清楚题意之后,我们先来看一下两条边相交得到的边是哪条边? 譬如说我们有两条边。我们想知道和的交边长度,如图可以很清楚...原创 2020-04-16 09:47:26 · 328 阅读 · 0 评论 -
最短路【仙人掌圆方树+LCA】
题目链接 BZOJ 2125 将原图首先变成一棵树,这里就是对仙人掌进行圆方树处理,于是接下去就是对新图进行处理了。 比较简单的,就是我们搜到的LCA点是圆点,那么肯定此时的距离就是答案了,如果不是圆点呢?此时的LCA点是方点的话,那么最后的最短距离还不好说,因为存在可能走环的另一头更近的可能性,或者它二者的距离可以更近,这里的话,就是特别处理一下即可,是通过环上原距离,还是环的另外半...原创 2020-03-19 10:39:46 · 241 阅读 · 0 评论 -
倍增法——解决LCA求树上两点最近公共祖先问题
在我们学过RMQ之后,我们知道了倍增法的原理,利用一个二的幂次来维护了每个以2为底数的区间长度。其实简单的说,就是一个合并问题,一个2可以有两个1组成,而一个4可以由两个2组成,以此类推。所以叫做倍增。倍增法通常能用以解决线性问题,譬如区间的最大值,当我们固定左端点的时候,当右端点不断向右移动的时候,不难发现,该区间的最大值也是单调不减的。 好了,一通乱讲之后该回归主题了。 现在,...原创 2020-01-26 15:59:02 · 786 阅读 · 0 评论 -
[COCI2015]Divljak【AC自动机+fail树+LCA】
题目链接 P5840给一组比较强的样例(我刚好是过了这个才过的):3aabacc21 aabacc2 2ans:1然后,讲一下思维的过程: 刚看到这个问题的时候,卡在了怎样去处理“访问到仅能算一次”,而不是“访问到几次就算几次”。大白话的意思就是“aaaaaa”里有6个“a”,但是我们只能对“a”算一次,所以,返回到fail树上去。 现在看到fail树,我...原创 2020-01-08 09:57:01 · 340 阅读 · 0 评论 -
Tree-String Problem 【CodeForces - 291E】【倍增(LCA)+哈希】
题目链接题意:给你N个点的树,树上的边的权值是一个自上往下的字符串,然后我们再给出一个字符串,是模式串,我们现在想知道模式串在树上的出现次数,譬如说样例。 我们查找的是aba,它在1——4这条链上出现了2次,在1——5上出现1次,在2——3上出现2次,在2——6上出现1次。这道题的做法不是唯一的,譬如说AC自动机也可以解决这个问题。 思路:因为长度确定为模式串的长度,...原创 2020-01-07 10:31:13 · 687 阅读 · 0 评论 -
良心送分题【牛客挑战赛35 E】【LCA处理+最短路】
题目链接链接:https://ac.nowcoder.com/acm/contest/3274/E来源:牛客网题目描述注:本题所有边的边权均为1{1}1,下文将不再提及。给定一棵n{n}n个点的树G=<V,E>{G=<V,E>}G=<V,E>,现在通过以下规则创造一个n×k{n\times k}n×k个点的图G′=<V′,E′>{...原创 2019-12-21 12:48:56 · 289 阅读 · 0 评论 -
树上三角形【BZOJ 3251】【斐波那契数列思维+LCA】
Description给定一大小为n的有点权树,每次询问一对点(u,v),问是否能在u到v的简单路径上取三个点权,以这三个权值为边长构成一个三角形。同时还支持单点修改。Input第一行两个整数n、q表示树的点数和操作数第二行n个整数表示n个点的点权以下n-1行,每行2个整数a、b,表示a是b的父亲(以1为根的情况下)以下q行,每行3个整数t、a、b若t=0,则询问(...原创 2019-11-22 20:49:10 · 277 阅读 · 0 评论 -
仙人掌与圆方树的学习 【模板】静态仙人掌
题目链接 BZOJ 2125 最短路 圆方树 求一幅仙人掌图中,Q次询问两点最短路。 仙人掌问题,我们可以直接将原来的N个点缩点成为一棵生成树——圆方树。 这棵圆方树是怎样建立的呢,首先,我们看图:这个是原图;这个是缩点之后的圆方树。 那么,两点之间的距离不就是可以通过LCA来求解了吗?但是这里有个问题,就是我们在求解LCA的时候,也是最关键的一点就是在于,...原创 2019-10-08 20:22:02 · 375 阅读 · 0 评论 -
Count on a tree 【SPOJ - COT】【树上第K小、可持久化线段树(主席树)】
题目链接 想了好久,一开始想去写树链剖分,但是怎样写第K小只在可持久化线段树中写过,然后就是得去想怎样做到状态的得到了,我们可以考虑从根节点出发,关系不断的递推下去,就可以变成一棵自上而下的可持久化线段树了。 具体是:我们可以看作是从根节点出发的树,状态也是这样往下推下去,如此建立的线段树,我们查询一段区间的状态可以从LCA的角度去看问题,找到LCA(x, y)然后,我们只要一个LCA...原创 2019-01-25 21:40:08 · 871 阅读 · 1 评论 -
Computer【HDU-2196】【在线LCA+树的直径】
题目链接#include <iostream>#include <cstdio>#include <cmath>#include <string>#include <cstring>#include <algorithm>#include <limits>#include <vec原创 2019-01-06 15:22:59 · 300 阅读 · 2 评论 -
Network 【HDU - 3078】【LCA+暴力查询】
题目链接 你要是真暴力这道题还是要T的,但是,做了剪枝就会过了,我们知道对于LCA每个节点有它自己的深度,在这里,我就将每个节点的深度数组当作了每个节点道最初根节点的距离了。 然后,就是剪枝操作饿了:判断是否是可行解的时候用的是dis[x]+dis[y]-2*dis[lca(x, y)]+1与Kth的大小关系即可,不然真会T,我试过。 还有,别读了道假题做半天,题目让你求的是区间...原创 2018-12-03 18:59:11 · 267 阅读 · 0 评论 -
Checkers 【HDU - 3830】【LCA+二分答案+辗转相除】
题目链接 题意:我们有(x, y, z)与(a, b, c)这三个点,问,每次可以条一颗棋子,使得新跳的棋子到的位置与原先位置的平均数是中间棋子的位置数。例如:(1, 3, 7)可以跳成(3, 5, 7),就是把“1”以“3”为中间的跳板,跳到“5”这个位置上去的。 很好的一道思维LCA的题,这道题,我们可以化成一棵树来想,关键是在于怎么建立这棵树,我们可以举个样例来看,我们可以发现(...原创 2018-12-06 11:02:02 · 324 阅读 · 0 评论 -
How far away ? 【HDU - 2586】【在线LCA算法讲解】
题目链接 做些LCA的算法,还是很提高代码能力的,这道题就是典型的LCA模板,所以用它来练一下我的LCA算法还是很好的。 我们要求的是在一棵树上的任意两点的相互距离,既然在一棵树上,就可以直接调用LCA来解了。 我们先任取一根节点,我取的是1,我们从1开始,以1为总的根来预处理这棵树,先对其进行遍历整棵树,建立相互间的关系,并且向下更新的时候不忘整理出dis[](到根1的距离)。...原创 2018-11-20 09:29:47 · 503 阅读 · 0 评论 -
Connections between cities 【HDU - 2874】【在线LCA算法】
题目链接 昨天刚学了在线LCA,今天就来硬刚这道题还是花了一整天的时间,不过对于LCA却有了更多的理解,这道题在讲述不同根的做法上尤其是很好的。 题目告诉我们有N个节点和M条边,以及C次询问,每次查询的是【L、R】这两个节点间的距离,还是算得上简单明了的告诉了我们得去用最近公共祖先来做的。 对于LCA,毕竟是初学,还是有些地方容易写出BUG,譬如说这道题,我一开始想把节点放进df...原创 2018-11-11 20:24:28 · 236 阅读 · 0 评论
分享