Pagini recente » Rating Saracut Bogdan Andrei (SarakottoBogudan) | Cod sursa (job #3128887) | Cod sursa (job #2556782) | Cod sursa (job #582930) | Cod sursa (job #2089173)
#include <cstdio>
#include <vector>
#include <cstring>
#include <algorithm>
using namespace std;
int n, x, i, j, a[16002], aux, k;
long long nr[16002], s, v[16002];
int cmp (long long a, long long b)
{
return (a>b);
}
int main ()
{
freopen("dosare.in", "r", stdin);
freopen("dosare.out", "w", stdout);
scanf("%d", &n);
scanf("%d", &x);
a[1]=0;
for (i=2; i<n; i++){
scanf("%d", &a[i]);
}
for (i=1; i<=n; i++){
scanf("%d", &x);
aux=a[i];
nr[i]+=x;
while (aux){
nr[aux]+=x;
aux=a[aux];
}
}
for (i=0; i<n; i++){
k=0;
for (j=1; j<=n; j++){
if (a[j]==i) v[++k]=nr[j];
}
sort(nr+1, nr+k+1);
for (j=k; j>0; j--)
s=s+(nr[j]*(j-k+1));
}
s+=2;
printf("%lld", s);
return 0;
}