Pagini recente » Cod sursa (job #1359049) | Cod sursa (job #1278334) | Cod sursa (job #131221) | Cod sursa (job #1363632) | Cod sursa (job #198168)
Cod sursa(job #198168)
#include <cstdio>
#include <vector>
#include <algorithm>
#define IN "dosare.in"
#define OUT "dosare.out"
#define FOR(i,a,b) for(int i=a;i<b;++i)
#define N_MAX 16001
#define pb push_back
#define ll long long
#define sz size()
using namespace std;
vector < vector<ll> > a(N_MAX);
ll acces[N_MAX];
ll total[N_MAX];
ll N;
ll sol;
void scan()
{
int x;
freopen(IN, "r",stdin);
freopen(OUT, "w",stdout);
scanf("%d", &N);
FOR(i,1,N)
{
scanf("%d", &x);
a[--x].pb(i);
}
FOR(i,0,N)
scanf("%d", &acces[i]);
}
void DF(int nod,int cost)
{
int l = a[nod].sz;
FOR(j,0,l)
DF(a[nod][j],cost+1);
FOR(j,0,l)
total[j] = acces[ a[nod][j] ];
sort(total , total + l );
reverse(total , total + l );
FOR(j,0,l)
sol += j* total[j],
acces[nod] += (ll)total[j];
sol += acces[nod];
}
void solve()
{
DF(0,1);
printf("%lld ",sol);
}
int main()
{
scan();
solve();
return 0;
}