#include #include #include #include using namespace std; const int N = 1e5 + 100; int n, k, ans; int sa[N]; vector V[N]; int dfs(int u, int fa) { int mi = 1e9; for (int v : V[u]) { if (v == fa) continue; mi = min(mi, dfs(v, u) - 1); } if (mi > k) return sa[u] ? k : mi; if (mi == 0) { ans++; return 1e9; } return mi; } int main() { //freopen("0.txt", "r", stdin); int T; scanf("%d", &T); while (T--) { scanf("%d%d", &n, &k); for (int i = 2, x; i <= n; i++) { scanf("%d", &x); V[i].push_back(x); V[x].push_back(i); } int c = 0; for (int i = 1; i <= n; i++) scanf("%d", sa + i), c += sa[i]; if (k > n) k = n; if (k == 0) { printf("%d\n", c); } else { ans = 0; if (dfs(1, 0) < 1e8) ans++; printf("%d\n", ans); } for (int i = 1; i <= n; i++) V[i].clear(); } return 0; }