Pagini recente » Cod sursa (job #3206247) | Cod sursa (job #1905652) | Cod sursa (job #2783712) | Cod sursa (job #98501) | Cod sursa (job #2090172)
#include<fstream>
#include<vector>
#include<algorithm>
using namespace std;
ifstream f("dosare.in");
ofstream g("dosare.out");
struct fisier{
int val,ind,nr;
}v[16001];
int N,x,s,pas[16001];
bool n[16001];
vector <int> G[16001];
bool cmp(fisier X,fisier Y){
return X.nr>Y.nr;
}
void dfs(int nod,int nr){
n[nod]=1,++nr,pas[nod]=nr;
for(int i=0;i<G[nod].size();++i)
if(!n[G[nod][i]])
dfs(G[nod][i],nr),++nr;
}
int main()
{
f>>N;
v[1].ind=1;
for(int i=2;i<=N;++i)f>>v[i].val,++v[v[i].val].nr,v[i].ind=i;
sort(v+2,v+N+1,cmp);
for(int i=2;i<=N;++i)G[v[i].val].push_back(v[i].ind),G[v[i].ind].push_back(v[i].val);
dfs(1,0);
for(int i=1;i<=N;++i)f>>x,s+=x*pas[i];
g<<s;
return 0;
}