Pagini recente » Cod sursa (job #2556757) | Cod sursa (job #2857931) | Cod sursa (job #2011412) | Cod sursa (job #608919) | Cod sursa (job #1430235)
#include <bits/stdc++.h>
using namespace std;
vector<int> g[16000];
int a[16000];
int N;
int propaga_in_sus(int u) {
for(int v : g[u]) {
a[u] += propaga_in_sus(v);
}
return a[u];
}
int f(int u) {
int s = 0;
vector<int> r;
for (int v : g[u]) {
s += f(v);
r.push_back(a[v]);
}
sort(r.begin(), r.end());
reverse(r.begin(), r.end());
for (int i = 0; i < r.size(); ++i) {
s += i * r[i];
}
return s + a[u];
}
int main(int argc, char *argv[]) {
freopen("dosare.in", "r", stdin);
freopen("dosare.out", "w", stdout);
scanf("%d", &N);
for(int i = 1; i < N; ++i) {
int tata;
scanf("%d", &tata);
g[tata - 1].push_back(i);
}
for(int i = 0; i < N; ++i) {
int acc;
scanf("%d", &acc);
a[i] = acc;
}
propaga_in_sus(0);
printf("%d\n", f(0));
return 0;
}