Pagini recente » Cod sursa (job #961208) | Cod sursa (job #1841449) | Cod sursa (job #2057422) | Cod sursa (job #2180226) | Cod sursa (job #328534)
Cod sursa(job #328534)
#include <stdio.h>
#include <vector>
#include <algorithm>
using namespace std;
long n,i,x;
long long sol,a[1601],aux[1601];
vector <long>v[1601];
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;
}