#include #include #include #include #include #include #include #include #include #include #include #include #include #include #define pb push_back #define mp make_pair #define sortvi(a) sort(a.begin(), a.end()) #define FOR(i, start, final) for (int i=start; i<=final; ++i) #define ROF(i, start, final) for (int i=start; i>=final; --i) #define f cin #define g cout using namespace std; typedef long long ll; typedef unsigned long long ull; typedef pair < int, int> pi; typedef vector< int > vi; typedef vector< pair< int, int > > vpi; int N, K, a[305], b[305], d[10005], sol, x, y; vi G[10005]; bool srv[10005], inQ[10005]; queue < int > Q; //ifstream f("test.in");ofstream g("test.out"); int main() { f>>N>>K; FOR(i,1,N)d[i]=(1<<30); FOR(i,1,K)f>>a[i]; FOR(i,1,K)f>>b[i], srv[b[i]]=1; FOR(i,2,N) { f>>x>>y; G[x].push_back(y); G[y].push_back(x); } FOR(i,1,K) { memset(inQ, 0, sizeof(inQ)); Q.push(a[i]); inQ[a[i]]=1; d[a[i]]=0; while (Q.size()) { int nod=Q.front(); Q.pop(); inQ[nod]=0; vector ::iterator it=G[nod].begin(); for (; it!=G[nod].end(); ++it) if ( d[nod] + 1 < d[*it] ) { d[*it]=d[nod]+1; //if (!inQ[*it])inQ[*it]=1, Q.push(*it); } } } FOR(i,1,N) if (srv[i]==1) sol=max(sol, d[i]); g<