#include using namespace std; #define ll long long int T, n, k, fa[101000], dep[101000], fl[101000], vis[101000]; #define pii pair #define fi first #define se second vectorG[101000]; void dfs(int x,int fff){ dep[x]=dep[fff]+1; for (auto y:G[x]) dfs(y,x); } int check(int x){ if (vis[x]) return 0; for (int i=1;i<=k;++i){ vis[x]=1; x=fa[x]; if (vis[x]) return 0; if (x==0) break; } vis[x]=1; return 1; } int main(){ for (cin>>T;T--;){ cin>>n>>k; for (int i=1;i<=n;++i) G[i].clear(); for (int i=2;i<=n;++i){ scanf("%d",&fa[i]); G[fa[i]].push_back(i); } dfs(1,0); vectorvec; for (int i=1;i<=n;++i){ scanf("%d",&fl[i]); if (fl[i]) vec.push_back({dep[i],i}); } sort(vec.begin(),vec.end(),greater()); memset(vis,0,sizeof vis); int ans=0; for (auto o:vec){ ans+=check(o.se); } cout<