Pagini recente » Cod sursa (job #1147339) | Cod sursa (job #1140730) | Cod sursa (job #1208387) | Cod sursa (job #1295449) | Cod sursa (job #2648186)
#include <bits/stdc++.h>
using namespace std;
ifstream in ("dosare.in");
ofstream out ("dosare.out");
int n, x;
vector <int> g[16005];
int v[16005], dp[16005];
bool comp(int a, int b) {
return v[a] > v[b];
}
void dfs(int nod) {
for(auto &fiu : g[nod]) {
dfs(fiu);
v[nod] += v[fiu];
}
dp[nod] = v[nod];
sort(g[nod].begin(), g[nod].end(), comp);
int ind = 0;
for(auto &fiu : g[nod])
dp[nod] += dp[fiu] + ind * v[fiu], ind++;
}
int main() {
in >> n;
for(int i = 1; i < n; i++)
in >> x, g[x].push_back(i + 1);
for(int i = 1; i <= n; i++)
in >> v[i];
dfs(1);
out << dp[1];
return 0;
}