Pagini recente » Cod sursa (job #122862) | Cod sursa (job #2747248) | Cod sursa (job #1525534) | Cod sursa (job #785141) | Cod sursa (job #1771820)
#include <cstdio>
#include <vector>
#include <algorithm>
#define nmax 16005
using namespace std;
long long ans,d[nmax];
int n,k[nmax];
vector <int> v[nmax];
void dfs(int nod)
{
int i,j;
d[nod]=k[nod];
for (i=0;i<v[nod].size();i++) {
j=v[nod][i];
dfs(j);
d[nod]+=d[j];
}
for (i=0;i<v[nod].size();i++)
v[nod][i]=d[v[nod][i]];
ans+=d[nod];
sort(v[nod].begin(),v[nod].end());
reverse(v[nod].begin(),v[nod].end());
for (i=0;i<v[nod].size();i++)
ans+=i*1LL*v[nod][i];
}
int main()
{
int i,j;
freopen("dosare.in","r",stdin);
freopen("dosare.out","w",stdout);
scanf("%d",&n);
for (i=2;i<=n;i++) {
scanf("%d",&j);
v[j].push_back(i);
}
for (i=1;i<=n;i++)
scanf("%d",&k[i]);
dfs(1);
printf("%lld",ans);
return 0;
}