洛谷 P3379 模板 最近公共祖先(LCA)

2022-05-12 15:01:30 字數 717 閱讀 1883

**\(rmq\):

題目傳送門:

\(st\)表也可以求\(lca\)。在帶回溯的\(dfs\)上,兩個點的\(lca\)就是在該序列上第一次出現的區間內深度最小的那個點。

至於這個序列有多長,因為每個點會出現度數次,度數總和是\(2*(n-1)\)。

時間複雜度:\(o(nlogn+m)\)

空間複雜度:\(o(nlogn)\)

**如下:

#include #include using namespace std;

const int maxn=5e5+5;

int n,m,rt,tot,cnt;

int f[21][maxn<<1],log[maxn<<1];

int pos[maxn],dep[maxn],dfn[maxn<<1];

int now[maxn],pre[maxn<<1],son[maxn<<1];

int read()

void add(int a,int b)

void dfs(int fa,int u)

int calc(int a,int b)

int query(int l,int r)

int main() dfs(0,rt);make_st();

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

return 0;

}

洛谷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,表示詢問...

洛谷 P3379 最近公共祖先(LCA) 模板

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