Pagini recente » Cod sursa (job #3282477) | Cod sursa (job #409172) | Cod sursa (job #1545789) | Cod sursa (job #512249) | Cod sursa (job #2973833)
#include <bits/stdc++.h>
#define int long long
using namespace std;
ifstream in("dosare.in");
ofstream out("dosare.out");
const int NMAX = 16002;
int cost[NMAX], d[NMAX], viz[NMAX];
int maxlevel;
vector <int> v[NMAX];
bool cmp( int a, int b ){
return cost[a] > cost[b];
}
void dfs( int nod ){
for( int i = 0 ; i < v[nod].size(); i++ ){
if( !viz[v[nod][i]] )
dfs(v[nod][i]);
cost[nod] += cost[v[nod][i]];
}
d[nod] = cost[nod];
sort( v[nod].begin(), v[nod].end(), cmp);
for( int i = 0 ; i < v[nod].size(); i++ )
d[nod] += i * cost[v[nod][i]] + d[v[nod][i]];
}
signed main()
{
int n, tata;
in >> n;
for( int i = 2 ; i <= n ; i++ ){
in >> tata;
v[tata].push_back(i);
}
for( int i = 1; i <= n ; i++ )
in >> cost[i];
dfs(1);
out << d[1];
return 0;
}