LCA
。十二。
这个作者很懒,什么都没留下…
展开
-
(纪中)3054. 祖孙询问【LCA】
解题思路 非常明显的LCALCALCA了吧,若LCA(x,y)LCA(x,y)LCA(x,y)等于x,则x是y的祖先,若LCA(x,y)LCA(x,y)LCA(x,y)等于y,则y是x的祖先,如果x,yx,yx,y都不等于LCA(x,y)LCA(x,y)LCA(x,y),说明他们不在一条路上,就输出0 代码 #include<iostream> #include<cstdio> #include<algorithm> #include<iomanip>...原创 2021-08-10 18:55:02 · 76 阅读 · 0 评论 -
(纪中)3555. 树的直径【LCA】
解题思路 先我们知道可以用LCA来求两点距离(当然需要dep),然后可以暴力枚举每个点 i,然后求当前点与 i 的距离,维护最大值。间复杂度 O(mnlog2n)O(mn\log_2n)O(mnlog2n) 会直接40分TLE 我们设原来的直径的两端为 s 和 t,当前点为 n,思考发现,答案只会存在三种情况 还是原来的s—>t. n—>t n—>s 不用再枚举当前点与每个点之间距离,只用求当前点与上一次的起点,终点的距离取max就好 代码 #include<ios...原创 2021-07-20 16:23:31 · 119 阅读 · 0 评论 -
【Ybtoj 第18章例5】运输计划【倍增问题】
解题思路 由于这是一篇补得博客,很多当时的细节都忘了,QAQ SO。。 博客推推》》第三篇的代码比较喜欢,然后可以看其他篇的思路 代码 #include<iostream> #include<cstdio> #include<iomanip> #include<cstring> #include<algorithm> #include<cmath> #include<queue> using namespace...原创 2021-06-12 09:36:41 · 128 阅读 · 0 评论 -
【Ybtoj 第18章例6】次小生成树【倍增问题】
解题思路 博客推推》》第一篇的讲解很详细,然后我的代码比较简单QAQ 代码 #include<iostream> #include<cstdio> #include<iomanip> #include<cstring> #include<algorithm> #include<cmath> #include<queue> #define ll long long using namespace std; co...原创 2021-06-12 09:45:06 · 60 阅读 · 0 评论 -
【Ybtoj 第18章例4】货车运输【倍增问题】
解题思路 首先,我们要求出最大生成树。这样做的原因是司机为了让自己能过通过载运更多的货物,显然会选择边权大的两边,由此可以推出我们要求的是最大生成树,去除原来的图中边权比较小的那些边。 得到了这样一个树之后,我们便考虑如何求出两个节点之间最小边权的最大值(即为题中的最大载重),因为这两点之间的路径是唯一的,我们只需要找出这条路径便可以得到答案。我们可以通过LCA来做到这一点。 这一步是LCA一个经典运用:静态树上链的权值查询问题。具体做法是在求出f数组的同时顺便求出一个dis数组,disi,jd...原创 2021-06-03 19:08:50 · 194 阅读 · 0 评论 -
【Ybtoj 第18章例3】树上距离【倍增问题】
解题思路 我们需要求出树上任意两点间的距离,那么我们可以任意前一个节点作为根节点,求出根节点到所有点的距离,用dis数组表示,用len(a,b)len(a,b)len(a,b)表示点对(a,b)(a,b)(a,b)之间的距离, 则len(a,b)=disx+disy−2∗disLCA(a,b)len(a,b)=dis_x+dis_y-2*dis_LCA(a,b)len(a,b)=disx+disy−2∗disLCA(a,b) 》》LCA的模板题 代码 #include<iostre...原创 2021-06-03 18:52:19 · 336 阅读 · 0 评论 -
【洛谷 3398】 仓鼠找sugar
题目描述 小仓鼠的和他的基(mei)(mei)(mei)友(zi)sugar(zi)sugar(zi)sugar住在地下洞穴中,每个节点的编号为1 n1~n1 n。地下洞穴是一个树形结构。这一天小仓鼠打算从从他的卧室(a)(a)(a)到餐厅(b)(b)(b),而他的基友同时要从他的卧室(c)(c)(c)到图书馆(d)(d)(d)。他们都会走最短路径。现在小仓鼠希望知道,有没有可能在某个地方,可以碰到他的基友? 小仓鼠那么弱,还要天天被zzqzzqzzq大爷虐,请你快来救救他吧! 输入格原创 2020-09-12 14:41:36 · 86 阅读 · 0 评论 -
【洛谷 3379】最近公共祖先【LCA】【倍增】
题目描述 如题,给定一棵有根多叉树,请求出指定两个点直接最近的公共祖先。 输入格式 第一行包含三个正整数 N,M,SN,M,SN,M,S,分别表示树的结点个数、询问的个数和树根结点的序号。 接下来 N−1N-1N−1 行每行包含两个正整数 x,yx, yx,y,表示 x 结点和 y 结点之间有一条直接连接的边(数据保证可以构成树)。 接下来 MMM 行每行包含两个正整数 a,ba, ba,b,表示询问 a 结点和 b 结点的最近公共祖先。 输出格式 输出包含 M 行,每行包含一个正整数,依次为每一个询问的原创 2020-08-22 20:42:03 · 444 阅读 · 0 评论