rt,本人同学交此版代码全部MLE,十分不解,求解答
#include<iostream>
#include<vector>
#define N 1000005
using namespace std;
vector<int> r[N];
int n,m,k,dep[N],siz[N],son[N],top[N],fa[N];
void dfs(int u,int faa){
dep[u]=dep[faa]+1;
fa[u]=faa;
siz[u]=1;
for(auto v:r[u])if(v!=faa){
dfs(v,u);
siz[u]+=siz[v];
if(siz[v]>siz[son[u]])son[u]=v;
}
}void dfs2(int u,int faa){
top[u]=faa;
if(son[u]==0)return;
dfs2(son[u],u);
for(auto v:r[u])
if(v!=faa&&v!=son[u])
dfs2(v,v);
}int lca(int u,int v){
while(top[u]!=top[v]){
if(dep[top[u]]<dep[top[v]])u^=v,v^=u,u^=v;
u=fa[top[u]];
}return dep[u]<dep[v]?u:v;
}int jump(int uu,int u,int step){
while(dep[uu]-dep[fa[top[u]]]<=step)u=fa[top[u]];
while(dep[uu]-dep[fa[u]]<=step)u=fa[u];
return u;
}int main(){
scanf("%d%d%d",&n,&m,&k);
for(int i=2,u,v;i<=n;i++){
scanf("%d%d",&u,&v);
r[u].push_back(v);
r[v].push_back(u);
}dfs(1,1);
dfs2(1,1);
for(int i=1,LCA,dis,d,t;i<=k;i++){
scanf("%d%d",&d,&t);
LCA=lca(m,d);dis=dep[m]+dep[d]-(dep[LCA]<<1);
if(dis<=t)printf("%d ",d),m=d;
else if(t==dep[m]-dep[LCA])printf("%d ",LCA),m=LCA;
else if(t<dep[m]-dep[LCA]){
m=jump(m,m,t);
printf("%d ",m);
}else{
m=jump(d,d,dis-t);
printf("%d ",m);
}
}return 0;
}