Pagini recente » Profil Tudor_Georgescu | simulare_oji_10_4 | Profil Snavenport | Cod sursa (job #184964) | Cod sursa (job #991514)
Cod sursa(job #991514)
#include<fstream>
#include<vector>
#include<algorithm>
using namespace std;
ifstream f("dosare.in");
ofstream g("dosare.out");
int i,n,x;
vector<int>v[16010];
long long a[16010],sol;
inline bool cmp(int x,int y)
{
return a[x]>a[y];
}
inline void dfs1(int x)
{
for(vector<int>::iterator it=v[x].begin();it!=v[x].end();++it)
{
dfs1(*it);
a[x]+=a[*it];
}
sort(v[x].begin(),v[x].end(),cmp);
}
inline void dfs2(int x)
{
long long nr=1;
for(vector<int>::iterator it=v[x].begin();it!=v[x].end();++it)
{
sol+=nr*a[*it];
++nr;
dfs2(*it);
}
}
int main()
{
f>>n;
for(i=2;i<=n;++i)
{
f>>x;
v[x].push_back(i);
}
for(i=1;i<=n;++i)
f>>a[i];
dfs1(1);
sol=a[1];
dfs2(1);
g<<sol<<'\n';
return 0;
}