ProgramAlgTrain/20240919/CSP常考算法模板/P3379【模板】LCA_倍增 -邻接表_todo.cpp

54 lines
857 B
C++
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#include <bits/stdc++.h>
using namespace std;
const int N = 500001;
int n,m,s;
int depth[N], Log[N];
int dbl[N][20]; //倍增数组
int tot;
vector<int> graph[N];
void dfs(int cur, int fa) {
//todo
}
int lca(int x,int y) {
// 把两个点升至同一高度,再一起跳
// TODO
if(x==y)
return x;
// 两个点同时往上跳跳到LCA的下一层为止
// TODO
return dbl[x][0];
}
/*
倍增算法时间复杂度是O(nlogn)
*/
int main() {
scanf("%d%d%d",&n,&m,&s);
for(int i=1; i<=n-1; i++) {
int x,y;
scanf("%d%d",&x,&y);
//todo
}
dfs(s,0); // 建树
// 预处理,常数优化
for(int i=2; i<=n; i++) {
//todo
}
for(int i=1; i<=m; i++) {
int x,y;
scanf("%d%d",&x,&y);
printf("%d\n",lca(x,y));
}
return 0;
}