#include #define broken cerr << "running on " << __FUNCTION__ <<" "<< __LINE__ << endl #define x first #define y second #define mp make_pair #define sz(a) int((a).size()) #define par pair #define poly vector #define i64 long long #define u64 unsigned long long using namespace std; const int N = 1e5 + 10, oo = 0x3f3f3f3f; int n, k, s[N], ans = 0; vector g[N]; int dfs(int u) { int dep = -oo; for(int &v : g[u]) { dep = max(dep, dfs(v)); } dep++; if(s[u]) dep = max(dep, 0); if(dep == k) ans++, dep = -oo; return dep; } int solve() { cin >> n >> k; for(int i = 1; i <= n; i++) g[i].clear(); for(int i = 2, fa; i <= n; i++) { cin >> fa; g[fa].push_back(i); } for(int i = 1; i <= n; i++) cin >> s[i]; ans = 0; int dep = dfs(1); if(dep >= 0) ans++; return ans; } int main() { ios::sync_with_stdio(0); cin.tie(0), cout.tie(0); int T; cin >> T; while(T--) cout << solve() << endl; return 0; }