
LCA
文章平均质量分 76
hhuhao
这个作者很懒,什么都没留下…
展开
-
[Tarjan]LCA算法
先来一波理论祖先若uu的祖先集合是sus_u,uu的父亲为fuf_u树根为rootroot 那么 su={{u,sfu}uu≠rootu=roots_u=\begin{cases}\{u,s_{f_u}\}&u\not=root\\u&u=root\end{cases} 通俗点讲:sus_u就是uu和uu的父亲和uu的父亲的父亲和uu的父亲的父亲的父亲…\dotsLCA设一颗有根树上的两点u,原创 2017-08-29 15:21:40 · 337 阅读 · 0 评论 -
LCA(倍增)
LCA就是给定一棵有根树,和两个点,求他们的最近公共祖先(深度最大)一般算法先将两个点 u,v u,v 移到同一层,再同时上移,直到相等(比较容易想到不是吗)单次复杂度: O(n) O(n) 倍增算法求出每个点 i i 距离为 2k 2^k 的祖先(若没有则为 0 0 )可以用以下式子以 O(1) O(1) 的时间复杂度求出:fi,j=ffi,j−1,j−1 f_{i,j}=f_{f_原创 2017-09-09 17:21:29 · 271 阅读 · 0 评论 -
LuoguP3938斐波那契
这是一道好题。首先,我们先将兔子分组。⎧⎩⎨⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪1234,56,7,89,10,11,12,13\begin{cases}1 \\ 2 \\ 3 \\ 4,5 \\ 6,7,8 \\ 9,10,11,12,13\end{cases}就是按出生时间分组,记ri,jr_{i,j}表示第ii月第jj只出生的兔子,fkf_k表示第kk只兔子的父亲,febi={1febi−1+febi原创 2017-11-04 16:32:47 · 337 阅读 · 0 评论