这是继上篇文章补充的代码
#include<iostream>
#include<vector>
#include<string>
using namespace std;
vector<int>G[100005];
int fa[100005]; .
int dp[100005],k[100005]; .
int ans;
void dfs(int u){
for(i=0;i<G[u].size();i++){//实际上是对这个父亲进行操作
int v=G[u][i];
dfs(v);
k[u]=max(k[u],k[v]-1);//细节
dp[u]=max(dp[u],dpl[1-1]);//细节
}
if(dp[u]==0){
ans++;
dp[u]=k[u];
}
}
int main(){
int n,m;
cin>>n;
for(int i=2;i<=n;i++){
cin>>m;
G[m].push_back(i);
}
for(int i=1;i<=n;i++)cin>>k[i];
dfs(1);
cout<<ans<<endl;
return 0;
}