#include #include #include #include using namespace std; int n,m,i,j,x,y,no,k,u,maxi = 0; unordered_map h; queue q; bool ok; int main() { cin>>n>>k; int d[n+2]; vector v[n+2]; bool spec[n+2],viz[n+2]; for(i=1;i<=n;i++) spec[i] = false; for(i=1;i<=k;i++) { cin>>no; spec[no] = true; } for(i=1;i<=k;i++) { cin>>no; h[no] = true; } for(i=1;i<=n-1;i++) { cin>>x>>y; v[x].push_back(y); v[y].push_back(x); } unordered_map::iterator ite; for(i=1;i<=n;i++) if(spec[i]) { ite = h.find(i); if(ite!=h.end()) h.erase(i); } if(!h.empty()) { for(j=1;j<=n;j++) if(spec[j]) { q.push(j); for(i=1;i<=n;i++) { viz[i] = false; d[i] = 0; } viz[j] = true; ok = true; while(ok == true) { u = q.front(); q.pop(); for(auto it = v[u].begin();it!=v[u].end()&&ok == true;it++) if(!viz[*it]) { d[*it] = d[u]+1; q.push(*it); if ((ite=h.find(*it))!=h.end()) { if (d[*it]>maxi) maxi = d[*it]; h.erase(*it); ok = false; } viz[*it] = true; } } while(!q.empty()) q.pop(); } } cout<