Pagini recente » Cod sursa (job #1978512) | Cod sursa (job #1060886) | Cod sursa (job #1499456) | Cod sursa (job #1378771) | Cod sursa (job #198317)
Cod sursa(job #198317)
#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()
{
ll x;
freopen(IN, "r",stdin);
freopen(OUT, "w",stdout);
scanf("%lld", &N);
FOR(i,1,N)
{
scanf("%lld", &x);
a[--x].pb(i);
}
FOR(i,0,N)
scanf("%lld", &acces[i]);
}
void DF(ll nod,ll cost)
{
ll 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] += total[j];
sol += acces[nod];
}
void solve()
{
DF(0,1);
printf("%lld ",sol);
}
int main()
{
scan();
solve();
return 0;
}