Pagini recente » Cod sursa (job #2724916) | Cod sursa (job #2483073) | Cod sursa (job #3194975) | Cod sursa (job #330937) | Cod sursa (job #128877)
Cod sursa(job #128877)
#include <stdio.h>
#include <vector>
#include <algorithm>
using namespace std;
#define nmax 16111
#define FOR(i,s,d) for(i=(s);i<(d);++i)
#define sz size()
#define pb push_back
typedef long long lint;
lint n,A[nmax],sol,aux[nmax];
vector <lint> G[nmax];
void doit(lint i,lint z)
{
lint j;
FOR(j,0,G[i].sz)
doit(G[i][j],z+1);
FOR(j,0,G[i].sz)
aux[j]=A[G[i][j]];
sort(aux,aux+G[i].sz);
reverse(aux,aux+G[i].sz);
FOR(j,0,G[i].sz)
sol+=j*aux[j],A[i]+=aux[j];
sol+=A[i];
}
int main()
{
freopen("dosare.in","r",stdin);
freopen("dosare.out","w",stdout);
scanf("%d",&n);
lint i,j;
FOR(i,1,n)
scanf("%lld",&j), G[--j].pb(i);
FOR(i,0,n)
scanf("%lld",&A[i]);
doit(0,1);
printf("%lld\n",sol);
return 0;
}