LCA
_YangZiJiang_
没什么意思的人!
展开
-
HDU 2874 Connections between cities (树上倍增 LCA + 并查集 )
Connections between cities:题解:树上倍增LCA处理最近公共祖先,并查集处理不同集合的树,递推距离,但是有一个坑点,这题卡常,卡的要命,所以在处理一个集合的树的时候,需要剪枝,访问过的点,就不需要再访问了,但是一般建树的dfs,访问过的点,可能还会访问一两次。AC代码:#include<bits/stdc++.h>using namespace ...原创 2020-03-01 20:47:50 · 212 阅读 · 0 评论 -
洛谷:P3258树上点差分
题目链接题解:难点在于根据访问顺序推出差分方式,前置知识:LCA+树上点差分AC代码:#include<bits/stdc++.h>using namespace std ;const int maxn=3e5+5;struct node{ int to,nex;} tr[maxn*4];int pre[maxn][32],depth[maxn],he...原创 2020-01-20 00:19:43 · 244 阅读 · 0 评论 -
树上主席树:洛谷P2636
上厕所的时候想通了,果然厕所是一个思考的好地方普通区间主席树和树上主席树的区别:这两个其实只有建树方式不同而已,普通主席树在for循环里面建树,for循环就相当于线性的区间建树,而树上主席树是在树形结构上建主席树,建出来的主席树有树的性质,所以我们要求任意两点之间最短路径上的第k小,就需要用到lca,这里其实用到了树上点差分的思路,在树上建树其实就是在dfs()遍历树的时候我们将当前版本...原创 2020-01-17 13:08:37 · 368 阅读 · 1 评论 -
poj 1986 lca板题
poj:1986这两天学会了树上倍增求lca,感觉树上倍增在线求法好方便呀,而且很快,利用二进制拆分的思路和倍增思想,感觉挺不错,然后验了几道题感觉还不错,我写的板子解决一些题应该没什么大问题,学到新东西,心里怪开心的AC代码:#include<cstdio>#include<cstring>#include<algorithm>using na...原创 2020-01-02 15:52:16 · 173 阅读 · 0 评论 -
HDU 2586 LCA求两点最短距离
HDU 2586题解:求树上两点最短距离,利用lca(u,v)求出u,v最近公共祖先la,并记录根节点到u,v,la的距离,最短距离:dis[u]+dis[v]-2*dis[la]AC代码:#include<cstdio>#include<cstring>#include<algorithm>using namespace std;//lca...原创 2020-01-02 15:33:49 · 273 阅读 · 1 评论 -
树上倍增:求LCA(u,v)
求LCA(u,v)的三种方法:1:rmq+dfs()序2:并查集+dfs()3:树上倍增然而听说1,2两种方法不怎么火热,3是目前最受欢迎的,故我就跟随大众潮流,学了树上倍增求LCA(u,v)的方法树上倍增:利用了rmq的思想,首先定义一个pre[i][j]数组,pre[i][j] 表示 i 往上走 2^j 层所表示的父辈,根据倍增关系,我们可以得到:pre[i][j]=pre[pr...原创 2020-01-01 17:16:01 · 224 阅读 · 0 评论