如题,WA 13 号测试点,大佬帮助
#include <bits/stdc++.h>
using namespace std;
const int N = 1e6 + 10;
vector<int> e[N];
vector<int> query[N],query_id[N];
int d[N],v[N],ans[N],father[N];
int n,m,s;
int find(int x){
if(father[x] == x) return x;
return father[x] = find(father[x]);
}
void tarjan(int x){
v[x] = 1;
for(int i = 0;i < e[x].size();i ++){
int y = e[x][i];
if(v[y]) continue;
d[y] = d[x] + 1;
tarjan(y);
father[y] = x;
}
for(int i = 0;i < query[x].size();i ++){
int y = query[x][i],id = query_id[x][i];
if(v[y] == 2){
int LCA = find(y);
ans[id] = LCA;
}
}
v[x] = 2;
}
void solve(){
cin >> n >> m >> s;
for(int i = 1;i <= n;i ++){
d[i] = 0;
v[i] = 0;
father[i] = i;
e[i].clear();
query[i].clear();
query_id[i].clear();
}
for(int i = 1;i < n;i ++){
int u,v;
cin >> u >> v;
e[u].push_back(v);
e[v].push_back(u);
}
for(int i = 1;i <= m;i ++){
int x,y;
cin >> x >> y;
query[x].push_back(y);
query_id[x].push_back(i);
query[y].push_back(x);
query_id[y].push_back(i);
}
tarjan(s);
for(int i = 1;i <= m;i ++) cout << ans[i] << "\n";
return;
}
int main(){
int T = 1;
while(T --) solve();
return 0;
}