Pagini recente » Cod sursa (job #148099) | Cod sursa (job #1143305) | Cod sursa (job #628729) | Cod sursa (job #3647) | Cod sursa (job #431779)
Cod sursa(job #431779)
#include <fstream>
#include <vector>
using namespace std;
#define foreach(V) for(typeof (V).begin() it = (V).begin(); it != (V).end(); ++it)
const int MAX_N = 16005;
ifstream fin ("dosare.in");
ofstream fout ("dosare.out");
int N;
vector <int> G[MAX_N];
long long Sol, V[MAX_N];
void dfs(int nod)
{
foreach(G[nod])
dfs(*it);
long long aux[MAX_N], nr = 0;
foreach(G[nod])
{
V[nod] += V[*it];
aux[nr++] = V[*it];
}
sort(aux, aux+nr, greater <int> ());
Sol += V[nod];
for(int i = 0; i < nr; ++i)
Sol += i*aux[i];
}
int main()
{
fin >> N;
for(int i = 2; i <= N; ++i)
{
int x;
fin >> x;
G[x].push_back(i);
}
for(int i = 1; i <= N; ++i)
fin >> V[i];
dfs(1);
fout << Sol;
}