#include using namespace std; #define rep(i,s,t) for(int i=s;i<=t;++i) #define per(i,s,t) for(int i=s;i>t;--i) #define dd(x) cout<<#x<<" = "< pii; const int N=1e6+11,mod=998244353; int fa[N],nxt[N],las[N],son[N],to[N],dep[N]; int T,tot,x,a[N],top,k,n; bool vis[N]; void add(int x,int y){ nxt[++tot]=las[x]; las[x]=tot; to[tot]=y; } bool cmp(int x,int y){ return dep[x]>dep[y]; } void dfs(int x,int k){ vis[x]=1; if(!k)return; for(int e=las[x];e;e=nxt[e]){ dfs(to[e],k-1); } } void Dfs(int x){ for(int e=las[x];e;e=nxt[e]){ dep[to[e]]=dep[x]+1; Dfs(to[e]); } } void solve(){ scanf("%d%d",&n,&k); tot=0; fa[1]=1; rep(i,1,n) las[i]=vis[i]=0; dep[1]=1; rep(i,2,n){ scanf("%d",fa+i); add(fa[i],i); } top=0; rep(i,1,n){ scanf("%d",&x); if(x)a[++top]=i; } Dfs(1); sort(a+1,a+top+1,cmp); int ans=0; rep(i,1,top){ if(vis[a[i]])continue; ++ans; int now=a[i]; int u=k; while(u--){ if(fa[now])now=fa[now]; } dfs(now,k); } printf("%d\n",ans); } int main(){ scanf("%d",&T); while(T--) solve(); return 0; }