#define _CRT_SECURE_NO_WARNINGS
#define _SILENCE_CXX17_C_HEADER_DEPRECATION_WARNING
#include <bits/stdc++.h>
using namespace std;
const int N = 1e5 + 50;
int cnt[N], w[N], nx[N], adj[N], que[N], ans[N], fa[N], dep[N];
bool vis[N];
int main()
{
    set<int> s1, s2;
    for (int n; ~scanf("%d", &n);)
    {
        memset(cnt, 0, sizeof cnt);
        memset(ans, 0, sizeof ans);
        memset(vis, 0, sizeof vis);
        memset(adj, 0, sizeof adj);
        for (int i = 2; i <= n; i++)
        {
            scanf("%d", &fa[i]);
            nx[i] = adj[fa[i]];
            adj[fa[i]] = i;
        }
        for (int i = 1; i <= n; i++)
        {
            scanf("%d", w + i);
            cnt[w[i]]++;
        }
        for (int i = 1; i <= n; i++) ans[i] = cnt[w[i]] > 1;
        int h = 0, t = 0;
        for (vis[que[t++] = 1] = true; h ^ t; h++)
            for (int x = adj[que[h]]; x; x = nx[x])
                if (!vis[x])
                    vis[que[t++] = x] = true, dep[x] = dep[que[h]] + 1;
        for (int i = t - 1; i; i--)
            ans[fa[que[i]]] += ans[que[i]];
        pair<int, int> ans1{-1, -1}, ans2{-1, -1};
        for (int i = 1; i <= n; i++)
        {
            pair<int, int> cur = {ans[i], i};
            if (ans1 < cur)
            {
                ans2 = ans1;
                ans1 = cur;
            }
            else if (ans2 < cur)
            {
                ans2 = cur;
            }
        }
        memset(vis, 0, sizeof vis);
        h = t = 0;
        que[t++] = dep[ans1.second] > dep[ans2.second] ? ans1.second : ans2.second;
        s1.clear(), s2.clear();
        s1.insert(w[*que]);
        s2.insert(w[1]);
        for (; h ^ t; h++)
            for (int x = adj[que[h]]; x; x = nx[x])
                if (!vis[x])
                {
                    s1.insert(w[x]);
                    vis[que[t++] = x] = true;
                }
        h = t = 0;
        for (que[t++] = 1; h ^ t; h++)
            for (int x = adj[que[h]]; x; x = nx[x])
                if (!vis[x])
                {
                    s2.insert(w[x]);
                    vis[que[t++] = x] = true;
                }
        int ans = s1.size() + s2.size();
        printf("%d\n", ans);
        //printf("%d %d %d %d\n", ans1.first, ans1.second, ans2.first, ans2.second);
    }
    return 0;
}
