Pagini recente » Cod sursa (job #2412743) | Cod sursa (job #1273799) | Cod sursa (job #2060891) | Cod sursa (job #1196875) | Cod sursa (job #2029642)
#include <cstdio>
#include <algorithm>
using namespace std;
int v[16001],t[16001],ff[16001];
long long f[16001];
void frecv (int nod,int x){
while (nod>0){
f[nod]+=x;
nod=t[nod];
}
}
int drum (int nod){
int sol=0;
while (nod>0){
sol=sol+v[nod]+1;
nod=t[nod];
}
return sol;
}
pair <int,pair <long long,int> > w[16001];
int main()
{
FILE *fin=fopen ("dosare.in","r");
FILE *fout=fopen ("dosare.out","w");
int n,i,nr;
long long sol;
fscanf (fin,"%d",&n);
for (i=2;i<=n;i++)
fscanf (fin,"%d",&t[i]);
for (i=1;i<=n;i++){
fscanf (fin,"%d",&ff[i]);
frecv (i,ff[i]);
}
// v[i] = al catelea subfolder e i can intri in folderul tata
for (i=1;i<=n;i++){
w[i].first=t[i];
w[i].second.first=-f[i];
w[i].second.second=i;
}
sort (w+1,w+n+1);
nr=-1;
for (i=1;i<=n;i++){
if (w[i].first!=w[i-1].first)
nr=0;
else nr++;
v[w[i].second.second]=nr;
}
sol=0;
for (i=1;i<=n;i++)
sol=sol+ff[i]*drum(i);
fprintf (fout,"%lld",sol);
return 0;
}