Pagini recente » Cod sursa (job #448619) | Cod sursa (job #36783) | Cod sursa (job #3288204) | Cod sursa (job #1338308) | Cod sursa (job #198327)
Cod sursa(job #198327)
# include <stdio.h>
# include <vector>
# include <algorithm>
using namespace std;
# define FIN "dosare.in"
# define FOUT "dosare.out"
# define MAXN 16010
# define MAXM 1000000
# define ll long long
ll N,i,len,x,s;
ll A[MAXN];
ll P[MAXN];
ll ss[MAXM];
vector <ll> dosare[MAXN];
int main()
{
freopen(FIN,"r",stdin);
freopen(FOUT,"w",stdout);
scanf("%lld",&N);
for (i = 0; i <= N; ++i) ss[i] = 0;
for (i = 2; i <= N; ++i)
{
scanf("%lld",&x);
dosare[x].push_back(i);
ss[x] = 1;
}
dosare[0].push_back(1);
ss[0] = 1;
for (i = 1; i <= N; ++i)
scanf("%lld",&A[i]);
ll j;
s = 0;
for (i = MAXM; i >= 0; --i)
if (ss[i] == 1)
{
len = dosare[i].size();
for (j = 0; j < len; ++j)
P[j + 1] = A [dosare[i][j]];
sort(P+1,P+len+1);
for (j = len; j >= 1; j--)
{
A[i] += P[j];
s += (len - j + 1) * P[j];
}
}
printf("%lld",s);
return 0;
}