Pagini recente » Cod sursa (job #1056591) | Cod sursa (job #1640648) | Cod sursa (job #2123232) | Cod sursa (job #126006) | Cod sursa (job #1775089)
#include <bits/stdc++.h>
#define maxN 16005
using namespace std;
vector<int>v[maxN];
long long sol,cost[maxN];
int n,i,j,x;
void dfs(int nod)
{
vector<long long>soncost;
for(vector<int>::iterator it=v[nod].begin();it!=v[nod].end();it++)
dfs(*it),
cost[nod]+=cost[*it],
soncost.push_back(cost[*it]);
sort(soncost.begin(),soncost.end());
sol+=cost[nod];
for(int i=0;i<soncost.size();i++)
sol+=1LL*(soncost.size()-1-i)*soncost[i];
}
int main()
{
freopen("dosare.in","r",stdin);
freopen("dosare.out","w",stdout);
scanf("%d",&n);
for(i=2;i<=n;i++)
scanf("%d",&x),
v[x].push_back(i);
for(i=1;i<=n;i++)
scanf("%lld",&cost[i]);
dfs(1);
printf("%lld",sol);
return 0;
}