#include<bits/stdc++.h>
using namespace std;
#define int long long
#define N 200005
int n,q;
vector<int> e[N];
int f[N][20],dep[N];
void dfs(int x,int fa){
f[x][0]=fa;
dep[x]=dep[fa]+1;
for(auto y:e[x]){
if(y==fa) continue;
dfs(y,x);
}
}
int LCA(int x,int y){
if(dep[x]<dep[y]) swap(x,y);
int k=dep[x]-dep[y];
for(int i=19;i>=0;i--){
if(k>=(1<<i)){
x=f[x][i];
k-=(1<<i);
}
if(x==y) return x;
for(int i=19;i>=0;i--){
if(f[x][i]!=f[y][i]) x=f[x][i],y=f[y][i];
}
}
return f[x][0];
}
signed main(){
cin>>n>>q;
for(int i=1;i<n;i++){
int x,y;
cin>>x>>y;
e[x].push_back(y);
e[y].push_back(x);
}
dfs(1,0);
for(int j=1;j<20;j++){
for(int i=1;i<=n;i++){
f[i][j]=f[f[i][j-1]][j-1];
}
}
while(q--){
int x,y;
cin>>x>>y;
int k=LCA(x,y);
cout<<(dep[x]-dep[k])+(dep[y]-dep[k])<<endl;
}
return 0;
}
输入:
5 3
1 2
1 3
3 4
3 5
1 3
2 5
1 4
预期
1
3
2
实际
3
5
4