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