#include <bits/stdc++.h>
using namespace std;
class customIO {
 public:
  istream& in;
  ostream& out;
  customIO(istream& _in, ostream& _out) : in(_in), out(_out) {}
  string next() {
    string s;
    in >> s;
    return s;
  }
  double nextDouble() { return stod(next()); }
  int nextInt() { return stoi(next()); }
  long long nextLong() { return stoll(next()); }
  template <typename T>
  void print(T t) {
    out << t;
  }
  template <typename T, typename... U>
  void print(T t, U... u) {
    out << t;
    print(u...);
  }
  template <typename T, typename... U>
  void println(T t, U... u) {
    print(t, u..., "\n");
  }
  void println() { print("\n"); }
};
int n;
vector<vector<int> > tree;
int colors[10004];
int actual[10004];
class TaskB {
 public:
  int res = 0;
  void solve(customIO& io) {
    n = io.nextInt();
    tree.resize(n + 5);
    for (int i = 2; i <= n; ++i) {
      int x = io.nextInt();
      tree[i].push_back(x);
      tree[x].push_back(i);
    }
    for (int i = 1; i <= n; ++i) colors[i] = io.nextInt();
    dfs(1, -1);
    io.println(res);
    return;
  }
  void make(int root, int par, int col) {
    for (int v : tree[root]) {
      if (v == par) continue;
      actual[v] = col;
      make(v, root, col);
    }
  }
  int dfs(int root, int par) {
    if (colors[root] != actual[root]) {
      ++res;
      actual[root] = colors[root];
      make(root, par, colors[root]);
    }
    for (int v : tree[root]) {
      if (v == par) continue;
      dfs(v, root);
    }
    return res;
  }
};
int main() {
  std::ios_base::sync_with_stdio(false);
  std::cin.tie(nullptr);
  std::cout << std::fixed;
  std::cout.precision(20);
  std::istream& in(std::cin);
  std::ostream& out(std::cout);
  customIO io(in, out);
  TaskB solver;
  solver.solve(io);
  return 0;
}
