傳送門
什麼是lca??
具體請檢視下面鏈結
**這是一道模板題。
卡vector,卡cin.
所以老實點用鄰接表和scanf把~
上面說的很詳細啦~
用的是倍增。暴力的優化。
鬼知道我理解倍增理解了一下午emmm。
(主要是儲存和優化位置)
然後!!自信滿滿以為理解了。
開始寫部落格了。。
發現。似乎???又什麼都不會了。
我的內心:???
後來又去各種畫圖理解了一遍~呼,終於完成了一篇部落格。
理解之後就很簡單啦!二進位制的運用~
話不多說。
**部分:
#include
using
namespace std;
const
int n =
5e5+10;
struct node
edge[n <<1]
;int head[n]
;int n, m, s;
int cnt;
int lg[n]
;int dep[n]
;int fa[n][25
];void
add(
int x,
int y)
void
dfs(
int now,
int fath)
for(
int i = head[now]
; i; i = edge[i]
.next)}}
intlca
(int x,
int y)
while
(dep[x]
> dep[y])if
(x == y)
for(
int k = lg[dep[x]]-
1; k >=
0; k--)}
return fa[x][0
];}int
main()
for(
int i =
1; i <= n; i++
)dfs
(s,0);
for(
int i =
1; i <= m; i++
)return0;
}
洛谷 P3379 LCA (樹鏈剖分法)
給出乙個n節點,s為根的樹,m次詢問某兩個節點間的lca n 500000,m 500000 lca的方法一般有倍增,tarjan,樹鏈剖分,這裡主要介紹樹鏈剖分 這個題用vector的樹鏈剖分會超時 常數原因 vector的其他方法,開o2貌似能過 size u 以u為根節點的子樹的節點數 dep...
洛谷P3379 模板 最近公共祖先(LCA)
題目描述 如題,給定一棵有根多叉樹,請求出指定兩個點直接最近的公共祖先。輸入輸出格式 輸入格式 第一行包含三個正整數n m s,分別表示樹的結點個數 詢問的個數和樹根結點的序號。接下來n 1行每行包含兩個正整數x y,表示x結點和y結點之間有一條直接連線的邊 資料保證可以構成樹 接下來m行每行包含兩...
洛谷 P3379 模板 最近公共祖先(LCA)
如題,給定一棵有根多叉樹,請求出指定兩個點直接最近的公共祖先。輸入格式 第一行包含三個正整數n m s,分別表示樹的結點個數 詢問的個數和樹根結點的序號。接下來n 1行每行包含兩個正整數x y,表示x結點和y結點之間有一條直接連線的邊 資料保證可以構成樹 接下來m行每行包含兩個正整數a b,表示詢問...