Pagini recente » Cod sursa (job #1368078) | Cod sursa (job #225217) | Cod sursa (job #302109) | Cod sursa (job #208015) | Cod sursa (job #423157)
Cod sursa(job #423157)
#include<stdio.h>
#include<vector>
#include<algorithm>
using namespace std;
vector<int> nr[16010];
int N;
int sol,fol[16010],so[16010];
void solve(int x){
int v=nr[x].size();
for(int i=0;i<v;++i){
so[i]=fol[nr[x][i]];
fol[x]+=so[i];
}
sol+=fol[x];
sort(so,so+v);
for(int i=v-1;i>=0;--i)
sol+=(v-i-1)*so[i];
}
void df(int x){
for(vector<int>::iterator it=nr[x].begin();it!=nr[x].end();++it)
df(*it);
solve(x);
}
int main(){
freopen("dosare.in","r",stdin);
freopen("dosare.out","w",stdout);
int i,x;
scanf("%d",&N);
for(i=2;i<=N;++i){
scanf("%d",&x);
nr[x].push_back(i);
}
for(i=1;i<=N;++i)
scanf("%d",&fol[i]);
df(1);
printf("%d\n",sol);
fclose(stdin);
fclose(stdout);
return 0;
}