模板 最近公共祖先(LCA)

2022-02-04 07:32:56 字數 622 閱讀 9253

給你一棵有根樹,1為根節點,要求你計算出指定兩個結點的最近公共祖先。

輸入檔案的第一行兩個整數n和m,n為結點個數(2<=n,m<=100,000),結點編號為1到n,m表示詢問次數。

接下來n-1行,每行兩個整數x,y,表示x和y之間有一條邊相連;

接下來m行,每行兩個整數a和b,要求計算出結點a和b的最近公共祖先。

輸出檔案共m行,每行為乙個詢問的最近公共祖先的編號。

5 21 2

2 32 4

5 42 5

3 52

2

#include #include #include #define maxn 100005

using namespace std;

int n,m,cnt,head[maxn],fa[maxn][17],deep[maxn];

struct nodee[maxn<<1];

void addedge(int x,int y)

void dfs(int u,int pre)

}void st()

int lca(int u,int v)

int main()

return 0;

}

模板 最近公共祖先(LCA)

題自洛谷 如題,給定一棵有根多叉樹,請求出指定兩個點直接最近的公共祖先。輸入格式 第一行包含三個正整數n m s,分別表示樹的結點個數 詢問的個數和樹根結點的序號。接下來n 1行每行包含兩個正整數x y,表示x結點和y結點之間有一條直接連線的邊 資料保證可以構成樹 接下來m行每行包含兩個正整數a b...

模板 lca 最近公共祖先

lca hljs cpp include include using namespace std const int maxn 500001 int n,m,gen,x,y struct edgeedge 2 maxn int deep maxn fa maxn 20 deep記錄每個點的深度,fa...

最近公共祖先 LCA 模板

lca即最近公共祖先,是指 在有根樹中,找出某兩個結點u和v最近的公共祖先。時間複雜度o nlogn m n 步驟 1.將樹看作乙個無向圖,從根節點開始深搜,得到乙個遍歷序列。2.在x y區間中利用rmq演算法找到深度最小返回其下標。可以上洛谷找模板題測試 include include inclu...