#include #include #include #include #include #include #include #include #include #include #include #include using namespace std; vector > g(1024); vector distForFastestDrop(1024, 1000000000); void bfs(int source){ vector visited(1024); queue > q; vector dist(1024, 1000000000); q.push(make_pair(source, 0)); visited[source] = true; while(!q.empty()){ pair f = q.front(); int v = f.first; int d = f.second; dist[v] = min(dist[v], d); // cout << v << " " << d << endl; q.pop(); for(int i = 0; i < g[v].size(); i++){ int inV = g[v][i]; if(!visited[inV]){ q.push(make_pair(inV, d+1)); visited[inV] = true; } } } for(int i = 0; i < 1024; i++){ distForFastestDrop[i] = min(distForFastestDrop[i], dist[i]); } } int main() { int n, k; cin >> n >> k; vector specs(k); vector servers(k); for(int i = 0; i < k; i++){ cin >> specs[i]; } for(int i = 0; i < k; i++){ cin >> servers[i]; } for(int i = 0; i < n -1; i++){ int x,y; cin >> x >> y; g[x].push_back(y); g[y].push_back(x); } for(int i = 0; i < specs.size(); i++){ //cout <<"sp " << specs[i] << endl; bfs(specs[i]); } int max1 = -1; for(int i = 0; i < servers.size(); i++){ // cout << distForFastestDrop[servers[i]] << endl; max1 = max(max1, distForFastestDrop[servers[i]]); } cout << max1 << endl; return 0; }