#include using namespace std; const int N=100005; int f[N]; int fa[N][18]; int dep[N],in[N],out[N]; int n,k; int cnt; vector e[N]; inline int ask(int x) { int ans=0; for (int i=x;i;i-=i&(-i)) ans+=f[i]; return ans; } inline void add(int x,int y) { for (int i=x;i<=n;i+=i&(-i)) f[i]+=y; } inline void dfs(int x,int y) { in[x]=++cnt; dep[x]=dep[y]+1; fa[x][0]=y; for (int i=1;i<=16;++i) fa[x][i]=fa[fa[x][i-1]][i-1]; for (int z:e[x]) dfs(z,x); out[x]=cnt; } inline int kthfa(int x) { for (int i=0;i<=16;++i) if ((1<dep[a.x]; } }; vector
v; int main() { int t; scanf("%d",&t); while (t--) { scanf("%d%d",&n,&k); for (int i=1;i<=n;++i) e[i].clear(); for (int i=2,x;i<=n;++i) { scanf("%d",&x); // x=i-1; e[x].push_back(i); } cnt=0; dfs(1,0); v.clear(); for (int i=1,x;i<=n;++i) { scanf("%d",&x); // x=1; if (x) v.push_back({i}); } sort(v.begin(),v.end()); int ans=0; for (int i=1;i<=n;++i) f[i]=0; for (int i=0;i<(int)v.size();++i) { int x=v[i].x; if (!ask(in[x])) { ++ans; int kf=kthfa(x); // cout<<"?"<