Pagini recente » Cod sursa (job #2473718) | Cod sursa (job #1948830) | Cod sursa (job #2186791) | Cod sursa (job #15577) | Cod sursa (job #978073)
Cod sursa(job #978073)
#include <iostream>
#include <fstream>
#include <vector>
#include <algorithm>
using namespace std;
#define MAXN 16010
ifstream f("dosare.in");
ofstream g("dosare.out");
int n;
vector<int> G[MAXN];
int a[MAXN];
long long solutie;
inline bool cmp(int x, int y) {
return a[x] > a[y];
}
void DFS(int nd) {
for (int i = 0; i < G[nd].size(); i++) {
DFS(G[nd][i]);
a[nd] += a[G[nd][i]];
}
sort(G[nd].begin(), G[nd].end(), cmp);
}
void DFS2(int nd) {
for (int i = 0; i < G[nd].size(); i++) {
solutie += (long long) (i + 1) * a[G[nd][i]];
DFS2(G[nd][i]);
}
}
int main()
{
f >> n;
for(int i = 2; i <= n; i++) {
int x;
f >> x;
G[x].push_back(i);
}
for(int i = 1;i <= n; i++)
f >> a[i];
DFS(1);
solutie += a[1];
DFS2(1);
g << solutie;
return 0;
}