#include <bits/stdc++.h>
using namespace std;
const int MOD = 1e9 + 7, MAX = 1e5 + 5;
long long powN(long long a, long long p) {
  if (p == 0) return 1;
  long long z = powN(a, p / 2);
  z = (z * z) % MOD;
  if (p % 2) z = (z * a) % MOD;
  return z;
}
vector<bool> is_prime(MAX + 1, true);
void Sieve() {
  is_prime[0] = is_prime[1] = false;
  int i, j;
  for (i = 2; i * i <= MAX; i++) {
    if (is_prime[i]) {
      for (j = i * i; j <= MAX; j += i) is_prime[j] = false;
    }
  }
}
long long modInv(long long a) { return powN(a, MOD - 2); }
int dfs(vector<vector<int> > &T, int root, vector<int> &C, int Cr) {
  if (C[root] == Cr) {
    int sum = 0;
    for (int i = 0; i < T[root].size(); i++) {
      sum += dfs(T, T[root][i], C, Cr);
    }
    return sum;
  } else {
    Cr = C[root];
    int sum = 0;
    for (int i = 0; i < T[root].size(); i++) {
      sum += dfs(T, T[root][i], C, Cr);
    }
    return sum + 1;
  }
}
int main() {
  int n;
  cin >> n;
  vector<vector<int> > T(n + 1);
  for (int i = 1; i < n; i++) {
    int x;
    cin >> x;
    T[x].push_back(i + 1);
  }
  vector<int> C(n + 1);
  for (int i = 0; i < n; i++) {
    cin >> C[i + 1];
  }
  int ans = dfs(T, 1, C, 0);
  cout << ans << endl;
}
