求帮助。个人认为是pre_lca函数的问题捏(玄关
#include<bits/stdc++.h>
using namespace std;
const int N = 1e5 + 5;
int n,q,dep[N],dp[N][30];
vector<int> nbr[N];
void pre_lca(int cur,int fa)
{
dp[cur][0] = fa;
dep[cur] = dep[fa] + 1;
for(int i=1;(1<<i)<=dep[cur];i++)
dp[cur][i] = dp[dp[cur][i-1]][i-1];
for(int i=0;i<nbr[cur].size();i++)
{
int nxt = nbr[cur][i];
if(nxt != fa)
pre_lca(nxt,cur);
}
return ;
}
int lca(int x,int y)
{
if(dep[x] >= dep[y])
swap(x,y);
for(int i=20;i>=0;i--)
if(dep[dp[y][i]] <= dep[x])
y = dp[y][i];
if(y == x)
return y;
for(int i=20;i>=0;i--)
if(dp[y][i] != dp[x][i])
y = dp[y][i],x = dp[x][i];
return dp[x][0];
}
int getdis(int x,int y)
{
return dep[x] + dep[y] - 2 * dep[lca(x,y)];
}
int main()
{
cin>>n>>q;
for(int i=1;i<n;i++)
{
int x,y;
cin>>x>>y;
nbr[x].push_back(y);
nbr[y].push_back(x);
}
pre_lca(1,0);
for(int i=1;i<=q;i++)
{
int a,b,c,d;
int p1 = lca(a,b),p2 = lca(c,d);
bool f1 = getdis(a,p2) + getdis(b,p2) == getdis(a,b);
bool f2 = getdis(c,p1) + getdis(d,p1) == getdis(c,d);
if(f1 || f2)
cout<<"Y\n";
else
cout<<"N\n";
}
return 0;
}