Cod sursa(job #116677)

Utilizator wefgefAndrei Grigorean wefgef Data 19 decembrie 2007 11:32:41
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;
}