Pagini recente » Cod sursa (job #1664685) | Cod sursa (job #3128061) | Cod sursa (job #1195003) | Cod sursa (job #2904982) | Cod sursa (job #2496407)
#include <fstream>
#include <algorithm>
#include <vector>
using namespace std;
int n, i, x;
bool viz[16001];
long long d[16001], cost[16001];
vector <int> g[16001];
ifstream fin ("dosare.in");
ofstream fout ("dosare.out");
int cmp (int x, int y)
{
return cost[x]>cost[y];
}
void dfs (int s)
{
int v, i;
viz[s]=1;
for (i=0;i<g[s].size();i++) {
v=g[s][i];
if (viz[v]==0)
dfs(v);
cost[s]+=cost[v];
}
d[s]=cost[s];
sort (g[s].begin(), g[s].end(), cmp);
for (i=0;i<g[s].size();i++) {
v=g[s][i];
d[s]+=i*cost[v]+d[v];
}
}
int main () {
fin>>n;
for (i=2;i<=n;i++) {
fin>>x;
g[x].push_back(i);
}
for (i=1;i<=n;i++) {
fin>>cost[i];
}
dfs(1);
fout<<d[1];
return 0;
}