#include using namespace std; const int oo = 10000000; int n, k, p[100005], d[100005], t[100005]; vector < pair > seq; void dfs(int x) { if (!d[p[x]]) dfs(p[x]); d[x] = d[p[x]] + 1; } void solve() { memset(p, 0, sizeof p); memset(d, 0, sizeof d); memset(t, 0, sizeof t); scanf("%d %d", &n, &k); k = min(k, n); seq.clear(); for (int i = 2; i <= n; i++) { scanf("%d", &p[i]); } d[1] = 1; for (int i = 2; i <= n; i++) { dfs(i); seq.push_back(make_pair(d[i], i)); } sort(seq.begin(), seq.end()); for (int i = 1; i <= n; i++) { scanf("%d", &t[i]); if (t[i] == 1) t[i] = k; else t[i] = oo; } for (int j = n - 2; j >= 0; j--) { int i = seq[j].second; if (t[i] == 0 || t[i] == oo) continue ; t[p[i]] = min(t[p[i]], t[i] - 1); t[i] = oo; } int ans = 0; for (int i = 1; i <= n; i++) { if (t[i] != oo) ans++; } printf("%d\n", ans); } int main() { int t; scanf("%d", &t); while (t--) { solve(); } return 0; }