Pagini recente » Cod sursa (job #1786724) | Cod sursa (job #1175391) | Cod sursa (job #258532) | Cod sursa (job #2440300) | Cod sursa (job #328525)
Cod sursa(job #328525)
#include <stdio.h>
#include <vector>
#include <algorithm>
using namespace std;
long n,i,x;
long long sol,a[161],aux[161];
vector <long>v[161];
void DF(long x){
int i,l=v[x].size();
for (i=0;i<l;i++)
DF(v[x][i]);
for (i=0;i<l;i++)
aux[i]=a[v[x][i]];
sort(aux,aux+l);
for (i=l-1;i>=0;i--){
sol+=i*aux[l-i-1];
a[x]+=aux[i];
}
sol+=a[x];
}
int main(){
freopen("dosare.in","r",stdin);
freopen("dosare.out","w",stdout);
scanf("%ld",&n);
for (i=2;i<=n;i++){
scanf("%ld",&x);
v[x].push_back(i);
}
for (i=1;i<=n;i++)scanf("%ld",&a[i]);
DF(1);
printf("%lld\n",sol);
return 0;
}