Pagini recente » Cod sursa (job #78551) | Cod sursa (job #2984131) | Cod sursa (job #2549188) | Cod sursa (job #2586275) | Cod sursa (job #2089714)
#include <cstdio>
#include <vector>
#include <cstring>
#include <algorithm>
using namespace std;
int n, x, i, j, a[16002], aux, k, viz[16002];
long long nr[16002], s, v[16002];
vector<int>G[16001];
int cmp (long long a, long long b)
{
return (a>b);
}
int dfs (int x)
{
int y=0, k=0, Y=0;
long long v[16002];
for (int i=0; i<G[x].size(); i++){
y=dfs(G[x][i]);
nr[x]+=y;
v[++k]=y;
}
sort(v+1, v+k+1, cmp);
for (int i=1; i<=k; i++){
s+=v[i]*i;
}
nr[x]+=viz[x];
return nr[x];
}
int main ()
{
freopen("dosare.in", "r", stdin);
freopen("dosare.out", "w", stdout);
scanf("%d", &n);
for (i=2; i<=n; i++){
scanf("%d", &x);
G[x].push_back(i);
}
for (i=1; i<=n; i++)
scanf("%d", &viz[i]);
x=dfs(1);
s+=x;
printf("%lld",s);
return 0;
}