Pagini recente » Cod sursa (job #1997937) | Cod sursa (job #51060) | Cod sursa (job #452137) | Cod sursa (job #1395484) | Cod sursa (job #2648187)
#include <bits/stdc++.h>
using namespace std;
ifstream in ("dosare.in");
ofstream out ("dosare.out");
int n, x;
vector <int> g[16005];
long long 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] + v[fiu] * ind, 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;
}