#include #include #include using namespace std; vector > Map; int N, K, in, sf, x, y, elem, need[10002], T[10002], coada[10002], Length[10002]; int main() { #ifndef ONLINE_JUDGE freopen("input.txt","r",stdin); #endif // ONLINE_JUDGE cin >> N >> K; Map.resize(10002); for(int i = 1; i <= K; ++i) { cin >> x; T[x] = 1; coada[++sf] = x; } elem = K; for(int i = 1; i <= K; ++i) { cin >> x; need[x] = 1; if(T[x]) { need[x] = 0; --elem; } } for(int i = 1; i < N; ++i) { cin >> x >> y; Map[y].push_back(x); Map[x].push_back(y); ++Length[x]; ++Length[y]; } in = 1; int mx = 0; while(in <= sf && elem) { for(int i = 0;elem && i < Length[coada[in]]; ++i) { if(T[Map[coada[in]][i]] == 0) { T[Map[coada[in]][i]] = T[coada[in]] + 1; if(need[Map[coada[in]][i]] == 1) { need[Map[coada[in]][i]] = 0; --elem; mx = max(mx, T[Map[coada[in]][i]]); } coada[++sf] = Map[coada[in]][i]; } } ++in; } cout << max(0, mx - 1) << '\n'; return 0; }