Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <cstdio>
- #include <algorithm>
- #include <vector>
- #define N 100001
- using namespace std;
- int n,x,i,v[N],A[N],B[N];
- vector<int> V[N];
- void DF(int nod)
- {
- A[nod]=0;
- B[nod]=v[nod];
- if(V[nod].size()==0)
- return;
- for(vector<int>::iterator it=V[nod].begin();it!=V[nod].end();++it)
- DF(*it);
- for(vector<int>::iterator it=V[nod].begin();it!=V[nod].end();++it)
- A[nod]+=max(A[*it],B[*it]),B[nod]+=A[*it];
- }
- int main()
- {
- scanf("%d %d",&n,&x);
- for(i=2;i<=n;++i)
- scanf("%d",&x),V[x].push_back(i);
- for(i=1;i<=n;++i)
- scanf("%d",&v[i]);
- DF(1);
- printf("%d\n",max(A[1],B[1]));
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement