Pagini recente » Cod sursa (job #1438025) | Cod sursa (job #1730631) | Cod sursa (job #3147992) | Cod sursa (job #1876584) | Cod sursa (job #2088032)
#include<bits/stdc++.h>
using namespace std;
ifstream f("dosare.in");
ofstream g("dosare.out");
long long n,Hmm[16002];
long long sum[16002],a[16002];
vector<int>v[16002];
bool cmp(int a, int b)
{
return sum[a]<sum[b];
}
void dfs(int nod)
{
for(int i=0;i<v[nod].size();++i)
dfs(v[nod][i]);
for (int i=0; i<v[nod].size(); i++)
{
int vecin = v[nod][i];
sum[nod] += sum[vecin];
a[i] = Hmm[vecin];
Hmm[nod] += Hmm[vecin];
}
sort(a, a+v[nod].size());
for (int i=v[nod].size()-1; i>=0; i--)
sum[nod] += a[i]*(v[nod].size()-i-1);
sum[nod]+=Hmm[nod];
}
int main()
{
f>>n;
for(int i=2;i<=n;++i)
{
int nr;
f>>nr;
v[nr].push_back(i);
}
for(int i=1;i<=n;++i)
f>>Hmm[i];
dfs(1);
g<<sum[1]<<'\n';
return 0;
}