#include <bits/stdc++.h>
long long int dx[] = {0, -1, 1, 0, 0}, dy[] = {0, 0, 0, -1, 1};
using namespace std;
long long int maxx = INT_MIN;
long long int minx = INT_MAX;
vector<long long int> a[10002];
bool vis[10002];
long long int ans;
long long int nodecolor[10002];
long long int curr_color[10002];
bool isValid(long long int i, long long int j, long long int n,
             long long int m) {
  if (i >= 0 and i < n and j >= 0 and j < m) {
    return true;
  }
  return false;
}
vector<long long int> read(long long int n) {
  vector<long long int> a;
  for (long long int i = 0; i < n; i++) {
    long long int x;
    cin >> x;
    a.push_back(x);
  }
  return a;
}
void dfs(long long int node, long long int par) {
  vis[node] = 1;
  if (nodecolor[node] != curr_color[par]) {
    ans++;
  }
  curr_color[node] = nodecolor[node];
  for (auto child : a[node]) {
    if (!vis[child]) {
      dfs(child, node);
    }
  }
}
int main() {
  long long int n;
  cin >> n;
  for (long long int i = 2; i < n + 1; i++) {
    long long int x;
    cin >> x;
    a[i].push_back(x);
    a[x].push_back(i);
  }
  for (long long int i = 1; i < n + 1; i++) {
    long long int x;
    cin >> x;
    nodecolor[i] = x;
  }
  curr_color[1] = nodecolor[1];
  dfs(1, 0);
  cout << ans << endl;
  return 0;
}
