Pagini recente » Cod sursa (job #2056679) | Profil StarGold2 | Cod sursa (job #206859) | Cod sursa (job #1605971) | Cod sursa (job #2071052)
#include <fstream>
#include <algorithm>
#include <vector>
#define DIM 16002
using namespace std;
ifstream fin ("dosare.in");
ofstream fout ("dosare.out");
int n,i,x;
long long d[DIM],v[DIM],w[DIM],f[DIM];
vector <int> L[DIM];
void dfs (int nod){
for (int i=0;i<L[nod].size();i++){
int vecin = L[nod][i];
dfs (vecin);
}
v[nod] = f[nod];
int m = L[nod].size();
for (int i=0;i<m;i++){
d[nod] += d[L[nod][i]];
w[i] = v[L[nod][i]];
v[nod] += v[L[nod][i]];
}
sort (w,w+m);
for (int i=m-1;i>=0;i--){
d[nod] += w[i] * (m-i-1);
}
d[nod] += v[nod];
}
int main (){
fin>>n;
for (i=2;i<=n;i++){
fin>>x;
L[x].push_back (i);
}
for (i=1;i<=n;i++)
fin>>f[i];
dfs (1);
fout<<d[1];
return 0;
}