洛谷P3379倍增LCA

2022-04-05 21:03:39 字數 839 閱讀 5825

#include #include #include #include #include #define re register

using namespace std ;

const int maxn = 5 * 1e5 + 4 ;

inline int read ()

while (ch >= '0' && ch <= '9')

return x * f ;

}int n , m , s , x , y , a , b , c , d ;

int head[maxn] , tot ;

struct edge edge[maxn << 1] ;

inline void add (int u , int v)

int dep[maxn] , f[maxn][21] ;

/* dep陣列用來記錄當前點的深度

f[i][j]代表距離i 2^j的祖先

*/inline void dfs (int x , int fa)

}inline int lca (int a , int b)

} if(a == b) return a ; //a,b在同一枝上時,此時a,b會在同一位置,返回任意乙個

for(re int i = 18 ; i >= 0 ; -- i)

} return f[a][0] ;

//此時a和b不是同乙個節點,但是a和b的父親就是a和b的lca。

}int main ()

dfs(s , 0) ;

while(m--)

return 0 ;

}

倍增 洛谷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行每行包含兩...

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

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