Pagini recente » Cod sursa (job #606574) | Cod sursa (job #2923892) | Cod sursa (job #2411470) | Cod sursa (job #525824) | Cod sursa (job #2089063)
#include <bits/stdc++.h>
using namespace std;
int n;
int TT[16006], l[16006];
long long a[16006];
vector <int> v[16006];
inline void dfs(int nod){
for(auto it : v[nod]){
dfs(it);
a[nod] += a[it];
}
}
inline bool cmp(int x, int y){
return a[x] > a[y];
}
int main(){
freopen("dosare.in", "r", stdin);
freopen("dosare.out", "w", stdout);
scanf("%d", &n);
for(int i = 2; i <= n ; ++i){
scanf("%d", &TT[i]);
v[TT[i]].push_back(i);
}
for(int i = 1; i <= n ; ++i)
scanf("%lld", &a[i]);
dfs(1);
long long Sol = a[1];
for(int i = 1; i <= n ; ++i){
if(v[i].empty()) continue ;
int NR = 0;
for(auto it : v[i]) l[++NR] = it;
sort(l + 1, l + NR + 1, cmp);
for(int i = 1; i <= NR ; ++i)
Sol = Sol + 1LL * (i - 1) * a[l[i]] + a[l[i]];
}
printf("%lld", Sol);
return 0;
}