Pagini recente » Cod sursa (job #57457) | Cod sursa (job #1376509) | Cod sursa (job #619978) | Cod sursa (job #2123311) | Cod sursa (job #120051)
Cod sursa(job #120051)
#include <cstdio>
#include <vector>
#include <algorithm>
#define NMAX (1<<14)
using namespace std;
vector<int> A[NMAX];
vector<pair<int,int> > P;
int N, Ac[NMAX], F[NMAX];
long long No[NMAX];
void read()
{
int i, j;
freopen("dosare.in", "r", stdin);
scanf("%d", &N);
for (i = 2; i <= N; i++)
{
scanf("%d", &j);
A[i].push_back(j);
A[j].push_back(i);
}
for (i = 1; i <= N; i++) scanf("%d", Ac+i);
}
void solve(int i)
{
int j, n = A[i].size();
F[i] = 1;
if (n==1)
{
No[i] = Ac[i];
return;
}
for (j = 0; j < n; j++)
if (!F[ A[i][j] ]) solve(A[i][j]);
No[i] = 0; P.clear();
for (j = 0; j < n; j++) P.push_back(make_pair(No[A[i][j]], A[i][j]));
for (j = 0; j < n; j++) No[i] = No[i]+(n-j)*No[A[i][j]];
No[i] = (No[i]+n)*Ac[i];
}
void write()
{
freopen("dosare.out", "w", stdout);
printf("%d\n", No[1]-1);
}
int main()
{
read();
solve(1);
write();
}