This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include <bits/stdc++.h>
#define pii pair<int, int>
#define ti3 tuple<int, int, int>
#define ti4 tuple<int, int, int, int>
#define int long long
// Honestly, I love you, to the mysterious (SinB) place   ~ SinB, Sunny Summer
using namespace std;
int p[500005];
int fs(int x){
    if (p[x] == x) return x;
    else return p[x] = fs(p[x]);
}
bool ss(int x, int y){
    return fs(x) == fs(y);
}
void ms(int x, int y){ // x <- y
    if (ss(x, y)) return;
    p[fs(y)] = fs(x);
}
vector<int> adjlist[500005];
int tpar[500005], dep[500005];
void dfs(int x, int p, int d){
    tpar[x] = p;
    dep[x] = d;
    for (auto i : adjlist[x]){
        if (i == p) continue;
        dfs(i, x, d+1);
    }
}
int prvState[500005], deg[500005];
main(){
    ios_base::sync_with_stdio(0); cin.tie(0);
    int n, k; cin >> n >> k;
    for (int i = 0; i < n - 1; i++){
        int a, b; cin >> a >> b;
        adjlist[a].push_back(b);
        adjlist[b].push_back(a);
    }
    dfs(1, -1, 0);
    iota(p, p+n+2, 0);
    for (int i = 1; i <= n; i++){
        int x; cin >> x;
        if (prvState[x]){
            int a = fs(i), b = fs(prvState[x]);
            while (!ss(a, b)){
                if (dep[a] > dep[b]) swap(a, b);
                ms(tpar[b], b);
                b = fs(b);
            }
        }
        prvState[x] = i;
    }
    for (int i = 1; i <= n; i++){
        for (auto j : adjlist[i]){
            if (!ss(i, j)) deg[fs(i)]++;
        }
    }
    int cnt = 0;
    for (int i = 1; i <= n; i++){
        if (deg[i] == 1) cnt++;
    }
    cout << (cnt + 1) / 2 << endl;
}
Compilation message (stderr)
mergers.cpp:31:1: warning: ISO C++ forbids declaration of 'main' with no type [-Wreturn-type]
   31 | main(){
      | ^~~~| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... |