#include using namespace std; const int N = 100000 + 9; int n, k; vector G[N]; bool vis[N]; int dp[N]; int dfs(int u, int p) { dp[u] = 0; int dep = vis[u] ? 0 : -1; for (int v : G[u]) { if (v == p) continue; int _dep = dfs(v, u); dep = max(dep, (~_dep ? _dep + 1 : -1)); dp[u] += dp[v]; } if ((u == 1 && ~dep) || dep == k) { ++dp[u]; dep = -1; } return dep; } void solve() { scanf("%d %d", &n, &k); for (int i = 1; i <= n; ++i) G[i].clear(); for (int i = 2; i <= n; ++i) { int p; scanf("%d", &p); G[p].push_back(i); G[i].push_back(p); } for (int i = 1; i <= n; ++i) { int x; scanf("%d", &x); vis[i] = x; } dfs(1, 0); printf("%d\n", dp[1]); } int main() { int T; scanf("%d", &T); while (T--) solve(); return 0; } /* 6 1 1 1 2 2 4 0 1 1 0 0 1 */