Pagini recente » Cod sursa (job #1216799) | Cod sursa (job #1786261) | Cod sursa (job #1206350) | Cod sursa (job #174475) | Cod sursa (job #2954259)
#include <fstream>
#include <algorithm>
#include <vector>
using namespace std;
ifstream f("dosare.in");
ofstream g("dosare.out");
int n,x;
vector<int>a[16003];
long long dist[16003],val[16003];
bool comp(int X,int Y)
{
return val[X]>val[Y];
}
void dfs(int nod)
{
for(int i=0;i<a[nod].size();i++)
{
int fiu=a[nod][i];
dfs(fiu);
val[nod]+=val[fiu];
}
int k=0;
dist[nod]=val[nod];
sort(a[nod].begin(),a[nod].end(),comp);
for (int i=0;i<a[nod].size();i++)
dist[nod]=dist[nod]+dist[a[nod][i]]+i*val[a[nod][i]];
}
int main()
{
f>>n;
for(int i=2;i<=n;i++)
{
f>>x;
a[x].push_back(i);
}
for(int i=1;i<=n;i++)
{
f>>val[i];
}
dfs(1);
g<<dist[1];
return 0;
}