Pagini recente » Cod sursa (job #2960550) | Cod sursa (job #2283974) | Cod sursa (job #3224050) | Cod sursa (job #2330312) | Cod sursa (job #2089255)
#include<fstream>
#include<algorithm>
#include<vector>
using namespace std;
ifstream f("dosare.in");
ofstream g("dosare.out");
int n,i,x,d[16000],dos[16000];
vector<int> G[16000];
void losen(int nod)
{
vector<int> C;
for(int i=0;i<G[nod].size();i++)
{
int x1=G[nod][i];
// g<<nod<<" "<<x1<<endl;
losen(x1);
// g<<nod<<" "<<x1<<endl;
d[nod]+=d[x1];
C.push_back(dos[x1]);
dos[nod]+=dos[x1];
}
sort(C.begin(),C.end());
for(int i=G[nod].size()-1;i>=0;i--)
{
d[nod]+=C[i]*(G[nod].size()-i-1);
}
d[nod]+=dos[nod];
}
int main()
{
f>>n;
for(i=2;i<=n;i++)
{
f>>x;
G[x].push_back(i);
}
for(i=1;i<=n;i++)
f>>dos[i];
losen(1);
/*for(i=1;i<=n;i++)
g<<d[i]<<" ";*/
g<<d[1];
return 0;
}