func_code_string: #include <bits/stdc++.h>   using namespace std;   using ll = long long;   using ull = unsigned long long;   using pii = pair<int, int>;   using pll = pair<ll, ll>;   template <class T>   inline bool Min(T &a, T b) {     return a > b ? (a = b, true) : false;   }   template <class T>   inline bool Max(T &a, T b) {     return a < b ? (a = b, true) : false;   }   inline int ni() {     int a;     scanf( %d , &a);     return a;   }   inline ll nl() {     ll a;     scanf( %lld , &a);     return a;   }   inline double nd() {     double a;     scanf( %lf , &a);     return a;   }   inline void pi(int a) { printf( %d  , a); }   inline void pl(ll a) { printf( %lld  , a); }   inline void pd(double a) { printf( %.12lf  , a); }   const int N = 2e5 + 100;   vector<int> gp[N];   bool is_university[N];   int n, k;   int cnt[N];   ll ans = 0;   void dfs(int v, int p) {     cnt[v] = is_university[v];     for (int next : gp[v])       if (next != p)         dfs(next, v), cnt[v] += cnt[next],             ans += min(cnt[next], k + k - cnt[next]);   }   void solve() {     n = ni();     k = ni();     for (int i = 0; i < (int)(k + k); ++i) is_university[ni()] = true;     for (int i = 0; i < (int)(n - 1); ++i) {       int a = ni();       int b = ni();       gp[a].push_back(b);       gp[b].push_back(a);     }     dfs(1, 1);     pl(ans);   }   int main() {     ios_base::sync_with_stdio(false);     cin.tie(0);     cout.tie(0);     solve();     return 0;   }   