Pagini recente » Statistici Pinca Horea (horeapinca) | Cod sursa (job #3193591) | Cod sursa (job #2078087) | Cod sursa (job #1268) | Cod sursa (job #116676)
Cod sursa(job #116676)
Utilizator |
Andrei Grigorean wefgef |
Data |
19 decembrie 2007 11:32:09 |
Problema |
Dosare |
Scor |
Ascuns |
Compilator |
cpp |
Status |
done |
Runda |
|
Marime |
0.75 kb |
#include <stdio.h>
#include <vector>
#include <algorithm>
using namespace std;
const int n_max = 16001;
vector < int > v[n_max];
long long d[n_max];
int i, n, t;
bool cmpf(const int x, const int y)
{
return (d[x]<d[y]);
}
void calculate (int x)
{
int i;
/*printf("Intra in %d\n",x);
fflush(stdout);*/
for (i = 0; i < v[x].size(); ++ i)
{
calculate(v[x][i]);
}
sort(v[x].begin(), v[x].end(), cmpf);
for (i = 0; i < v[x].size(); ++ i)
{
d[x] += d[v[x][i]] * (i+1);
}
}
int main()
{
freopen("dosare.in","r",stdin);
freopen("dosare.out","w",stdout);
scanf("%d",&n);
for (i = 1; i < n; ++ i)
{
scanf("%d", &t);
v[t].push_back(i+1);
}
for (i = 1; i <= n; ++ i)
scanf("%lld", &d[i]);
calculate(1);
printf("%lld\n",d[1]);
return 0;
}