Pagini recente » Cod sursa (job #2148669) | Cod sursa (job #562254) | Cod sursa (job #697123) | Cod sursa (job #1916593) | Cod sursa (job #1798958)
#include<bits/stdc++.h>
using namespace std;
ifstream f("dosare.in");
ofstream g("dosare.out");
int n,i,x;
long long d[1<<14],e[1<<14];
vector<int> v[1<<14];
void dfs(int nod)
{
int i,m=v[nod].size();
vector <long long>w;
for(i=0;i<m;i++)
{
int X=v[nod][i];
dfs(X);
d[nod]+=d[X];
w.push_back(e[X]);
e[nod]+=e[X];
}
sort(w.begin(),w.end());
for(i=m-1;i>=0;i--)
d[nod]+=w[i]*(m-i-1);
d[nod]+=e[nod];
}
int main()
{
f>>n;
for(i=2;i<=n;i++)
{
f>>x;
v[x].push_back(i);
}
for(i=1;i<=n;i++) f>>e[i];
dfs(1);
g<<d[1];
return 0;
}