#include<bits/stdc++.h>
using namespace std;
#define REP(i,n) for(int (i)=0;(i)<(n);(i)++) //repeat n times
#define REP2(i,s,n) for(int (i)=(s);(i)<(n);(i)++) //repeat from s to n
#define REPD(i,n) for(int (i)=(n);(i)>=0;(i)--) //repeat from n to 0
#define REPD2(i,s,e) for(int (i)=(s);(i)>=(e);(i)--) //repeat from s to e
#define ASIZE(a) (sizeof(a) / sizeof(a[0])) //array size
#define SORTD(a) sort(a,a+ASIZE(a),greater<int>()) //sort in descending order for array
#define SORTA(a) sort(a,a+ASIZE(a)) //sort in ascending order for array
#define SORTS(a) sort(a.begin(),a.end()) //sort in ascending order for string type
typedef long long LL;
typedef unsigned int UINT;
typedef pair<int, int> P;
typedef vector<int> Vi;
typedef vector< Vi > VVi;
void SCAN(int *a){scanf("%d",a);} //scan for type int
void SCAN(int *a,int n){int i;REP(i,n){scanf("%d",&a[i]);}} //scan for type int array
void SCAN(UINT *a){scanf("%u",a);} //scan for type unsigned int
void SCAN(UINT *a,int n){int i;REP(i,n){scanf("%u",&a[i]);}} //scan for type unsigned int array
void SCAN(LL *a){scanf("%lld",a);} //scan for type long long int
void SCAN(LL *a,int n){int i;REP(i,n){scanf("%lld",&a[i]);}} //scan for type long long int array
void SCAN(char *c){scanf(" %c",c);} //scan for type char
void SCAN(char *c,int n){int i;REP(i,n){scanf(" %c",&c[i]);}} //scan for type char array
const int MOD = 1000000007;
const int INF = 1999999999;
const LL INFLL = 999999999999999;
const int DX4[4]= {-1,0,1,0};
const int DY4[4]= {0,-1,0,1};
//fill an N-dimensional array with val
template<typename A, size_t N, typename T>
void FILL(A (&array)[N], const T &val){
fill((T*)array,(T*)(array+N),val);
}
long double pascalTri(int n,int r){
long double tri[n+1][n+1];
int i,j;
REP(i,n+1){REP(j,n+1){tri[i][j]=0;}}
REP(i,n+1){
REP(j,n+1){
if(j>i){break;}
if(j==0||j==i){tri[i][j]=1;}else{tri[i][j]=(tri[i-1][j-1]+tri[i-1][j]);}
}
}
return tri[n][r];
}
Vi graph[100005];
int depth[100005][2];
int visit[100005];
void setDepth(int nv,int pa,int d){
visit[nv]=1;
depth[nv][0]=pa;
depth[nv][1]=d;
int next;
REP(i,graph[nv].size()){
next=graph[nv][i];
if(graph[nv][i]!=pa){
setDepth(next,nv,d+1);
}
}
}
int lca(int a,int b){
int shallow=min(depth[a][1],depth[b][1]);
int deep=max(depth[a][1],depth[b][1]);
int s,d;
if(deep==depth[a][1]){
d=a;
s=b;
}else{
s=a;
d=b;
}
// cout<<"s "<<depth[s][0]<<" "<<depth[s][1]<<endl;
// cout<<"d "<<depth[d][0]<<" "<<depth[d][1]<<endl;
while(shallow!=depth[d][1]){
if(depth[d][0]==s){
// cout<<"LCA = "<<s<<endl;
return s;
}
d=depth[d][0];
}
// cout<<"s "<<depth[s][0]<<" "<<depth[s][1]<<endl;
// cout<<"d "<<depth[d][0]<<" "<<depth[d][1]<<endl;
while(depth[s][0]!=depth[d][0]){
if(depth[d][0]==s){
// cout<<"LCA = "<<s<<endl;
return s;
}
s=depth[s][0];
d=depth[d][0];
}
// cout<<"LCA = "<<depth[s][0]<<endl;
return depth[s][0];
}
int main(){
// cin.tie(0);
// ios::sync_with_stdio(false);
int n,q;
int i,j,k;
FILL(visit,0);
SCAN(&n);
int x[n],y[n];
REP(i,n-1){
SCAN(&x[i]);SCAN(&y[i]);
x[i]--;y[i]--;
graph[x[i]].push_back(y[i]);
graph[y[i]].push_back(x[i]);
}
SCAN(&q);
int a[q],b[q];
REP(i,q){
SCAN(&a[i]);SCAN(&b[i]);
a[i]--;b[i]--;
}
setDepth(0,-1,0);
// REP(i,n){
// cout<<i<<" ";
// REP(j,graph[i].size()){
// printf("%d ",graph[i][j]);
// }
// printf("\n");
// }
// REP(i,n){
// cout<<i<<" "<<depth[i][0]<<" "<<depth[i][1]<<endl;
// }
// cout<<endl;
int lcaV[q];
REP(i,q){
// cout<<a[i]<<" "<<b[i]<<endl;
lcaV[i]=lca(a[i],b[i]);
// cout<<endl;
}
REP(i,q){
// cout<<depth[a[i]][1]<<endl;
// cout<<depth[b[i]][1]<<endl;
// cout<<depth[lcaV[i]][1]<<endl;
cout<<depth[a[i]][1]+depth[b[i]][1]-2*depth[lcaV[i]][1]+1<<endl;
}
return 0;
}
./Main.cpp: In function ‘void SCAN(int*)’:
./Main.cpp:18:32: warning: ignoring return value of ‘int scanf(const char*, ...)’, declared with attribute warn_unused_result [-Wunused-result]
void SCAN(int *a){scanf("%d",a);} //scan for type int
^
./Main.cpp: In function ‘void SCAN(int*, int)’:
./Main.cpp:19:57: warning: ignoring return value of ‘int scanf(const char*, ...)’, declared with attribute warn_unused_result [-Wunused-result]
void SCAN(int *a,int n){int i;REP(i,n){scanf("%d",&a[i]);}} //scan for type int array
^
./Main.cpp: In function ‘void SCAN(UINT*)’:
./Main.cpp:20:33: warning: ignoring return value of ‘int scanf(const char*, ...)’, declared with attribute warn_unused_result [-Wunused-result]
void SCAN(UINT *a){scanf("%u",a);} //scan for type unsigned int
^
./Main.cpp: In function ‘void SCAN(UINT*, int)’:
./Main.cpp:21...