#include using namespace std; int T, n, k; vector e[100005]; int fa[100005], mark[100005], mx[100005]; int ans; void dfs(int node) { mx[node]=-1; for(int i=0; i=k) ans++; else if(mx[e[node][i]]==-1) continue; else mx[node]=max(mx[node], mx[e[node][i]]+1); } if(mx[node]==-1&&mark[node]) mx[node]=0; return; } int main() { scanf("%d", &T); for( ; T; --T) { scanf("%d%d", &n, &k); for(int i=1; i<=n; i++) e[i].clear(); for(int i=2; i<=n; i++) { scanf("%d", &fa[i]); e[fa[i]].push_back(i); } for(int i=1; i<=n; i++) scanf("%d", &mark[i]); ans=0; dfs(1); if(mx[1]>0||mark[1]) ans++; printf("%d\n", ans); } return 0; }