Pagini recente » Cod sursa (job #718271) | Cod sursa (job #1020551) | Cod sursa (job #2586038) | Cod sursa (job #1770280) | Cod sursa (job #2915861)
#include <bits/stdc++.h>
using namespace std;
using ll = long long;
ifstream fin( "dosare.in" );
ofstream fout( "dosare.out" );
const int MAXN = 16005;
vector<int> G[MAXN];
ll coef[MAXN], res;
void dfs( int u ) {
vector<ll> son_coef;
for ( auto v : G[u] ) {
dfs(v);
coef[u] += coef[v];
son_coef.push_back( coef[v] );
}
sort( son_coef.rbegin(), son_coef.rend() );
int idx = 0;
for ( auto son : son_coef ) {
res += son * idx;
++idx;
}
res += coef[u];
}
int main() {
int n, u;
fin >> n;
for ( int i = 2; i <= n; ++i ) {
fin >> u;
G[u].push_back(i);
}
for ( int i = 1; i <= n; ++i ) {
fin >> coef[i];
}
dfs(1);
// for ( int i = 1; i <= n; ++i ) {
// cout << coef[i] << " ";
// }
// cout << "\n" << res;
fout << res;
fin.close();
fout.close();
return 0;
}