LCA倍增講解

2022-05-03 12:00:20 字數 844 閱讀 7231

這道題值得一刷

題解裡的巨佬都用tarjan(~~窩太難了~~)

實際上是他們太巨了

本人(馬蜂)碼風獨特,請見諒

#include#include

#include

#include

using

namespace

std;

inline

intread()

while(ch>='

0'&&ch<='9'

)

return x*f;

}inline

void

out(int

a)int a,b,c,d,e,shen[500005],par[20][500005

],q1,q2, max_log_n;

vector

q[500005

];void dfs(int v,int p,intd)}

void

cl()

}}int lca(int u,int

v) }

if(u==v)

return

u;

for(int k=max_log_n-1;k>=0;k--)

}return par[0

][u];

}int

main()

dfs(c,-1,0

); cl();

for(int i=1;i<=b;i++)

return0;

}

事實證明read(),write()(他不香嗎)真香,給誰誰不香

都看到這裡了,不點贊嗎!

LCA之倍增簡單講解

lca之倍增簡單講解 lca代指least common ancestor,翻譯過來就是最近公共祖先 如下圖,x和y的最近公共祖先就是二號節點 那麼,如何來求這個最近公共祖先呢?1.暴力演算法 讓x和y一步一步向上爬,一直爬到相遇為止 x 4 3 2 y 6 5 2 可是這樣暴力實在是太慢了,我們要...

講解 模板 最近公共祖先(LCA)(倍增)

閱讀須知 我認為讀者已經掌握 或了解 了 倍增思想 樹 圖 的基本概念及簡單實現 存圖與建圖 dfs 嗯,我們來看看最近公共祖先 lca 的一種實現方式 倍增。話說什麼是最近公共祖先呢?emmm 大家如果知道樹的話,應該就知道父親節點與兒子節點了吧,那麼祖先就是父親的父親的父親的 總之在同一條樹鏈上...

倍增LCA複習

時間過去了如此之久,我連倍增lca都不怎麼記得了,要粗事啊。首先預處理層數和每個節點的父親,然後預處理p陣列,p i,j 表示i向上第2 j個祖先。最後對於每個詢問x,y先把x,y變成同一層數的 x或y向上走直到兩個層數相等 然後x,y同時向上走,直到x和y的父親相同位置。自 1.dfs預處理出所有...