Pagini recente » Cod sursa (job #1085815) | Cod sursa (job #2505699) | Cod sursa (job #2315551) | Cod sursa (job #1400164) | Cod sursa (job #1798954)
#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],w[1<<14];
vector<int> v[1<<14];
void dfs(int nod)
{
int i,x,m=v[nod].size();
for(i=0;i<m;i++)
{
x=v[nod][i];
dfs(x);
d[nod]+=d[x];
w[i]=e[x];
e[nod]+=e[x];
}
sort(w,w+m);
for(i=m-1;i>=0;i--)
d[nod]+=w[i]*(m-i-1);
d[nod]+=e[nod];
}
int main()
{
f>>n;
for(i=1;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;
}