#include<bits/stdc++.h>
using namespace std;
vector<int>edge[200010];
int a[200010],dep[200010];
bool vis[200010];
int n,k,x,y;
long long ans;
void init(){
cin>>n>>k;
cin>>x>>y;
for(int i=1;i<=n;i++){
edge[i].clear();
}
memset(vis,0,sizeof(vis));
memset(dep,0,sizeof(dep));
for(int i=1;i<=k;i++){
cin>>a[i];
vis[a[i]]=true;
}
for(int i=1;i<n;i++){
int u,v;
cin>>u>>v;
edge[u].push_back(v);
edge[v].push_back(u);
}
}
void dfs(int u,int fa){
dep[u]=dep[fa]+1;
for(int i=0;i<edge[u].size();i++){
int v=edge[u][i];
if(v==fa){
continue;
}
dfs(v,u);
if(vis[v]){
vis[u]=true;
}
}
}
void dfs1(int u,int fa){
if(vis[u])ans++;
for(int i=0;i<edge[u].size();i++){
int v=edge[u][i];
if(v==fa||vis[v]==false){
continue;
}
dfs1(v,u);
}
}
int main(){
int t;
cin>>t;
while(t--){
init();
ans=0;
vis[x]=vis[y]=1;
dfs(x,0);
dfs1(x,0);
ans=(ans-1)*2-(dep[y]-dep[x]);
cout<<ans<<endl;
}
return 0;
}
样例过了,其他OJ上也AC了,为什么不过