Pagini recente » Cod sursa (job #2468756) | Cod sursa (job #2371434) | Cod sursa (job #2469509) | Cod sursa (job #36822) | Cod sursa (job #2071602)
#include <fstream>
#include <algorithm>
#include <vector>
using namespace std;
ifstream fin("dosare.in");
ofstream fout("dosare.out");
int n,i,x,v[16001],d[16001],f[16001],a[16001];
vector<int> L[16001];
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 lung = L[nod].size();
for (int i=0; i<lung; i++)
{
int vecin = L[nod][i];
d[nod] += d[vecin];
a[i] = v[vecin];
v[nod] += v[vecin];
}
sort(a, a+lung);
for (int i=lung-1; i>=0; i--)
d[nod] += a[i]*(lung-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;
}