Pagini recente » Cod sursa (job #3214697) | Cod sursa (job #627071) | Cod sursa (job #3283061) | Cod sursa (job #3274871) | Cod sursa (job #3269798)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("dosare.in");
ofstream fout("dosare.out");
long long n, i, fr[16002];
vector<int> g[16002];
static inline bool Cmp(int a, int b) {
return fr[a] > fr[b];
}
static inline long long Dfs(int nod = 1, int ult = 0) {
long long sum = 0;
for(int urm : g[nod]) {
if(urm != ult) sum += Dfs(urm, nod);
}
sort(g[nod].begin(), g[nod].end(), Cmp);
for(int i = 0; i < g[nod].size(); i++) {
fr[nod] += fr[g[nod][i]];
sum += (i + 1) * fr[g[nod][i]];
}
return sum;
}
int main() {
fin >> n;
for(i = 2; i <= n; i++) {
int t;
fin >> t;
g[t].push_back(i);
}
for(i = 1; i <= n; i++) fin >> fr[i];
fout << Dfs() + fr[1];
return 0;
}