Pagini recente » Monitorul de evaluare | Stelele Informaticii 2009, clasele 9-10, ziua 1 | Cod sursa (job #1285764) | Unlucky... | Cod sursa (job #3240692)
#include <bits/stdc++.h>
#define VMAX 100
#define NMAX 16000
#define LOG 21
#define INF (int)(10e9)
#define MOD 4001
#define ll long long int
#define NIL 0
using namespace std;
ifstream fin("dosare.in");
ofstream fout("dosare.out");
int n;
vector<int> adj[NMAX+1];
ll a[NMAX+1],res;
bool cmp(int x,int y)
{
return a[x] > a[y];
}
void dfs(int x)
{
for(int i : adj[x])
{
dfs(i);
a[x] += a[i];
}
sort(adj[x].begin(),adj[x].end(),cmp);
res += a[x];
int k=0;
for(int i : adj[x])
{
res += k * 1ll * a[i];
++k;
}
}
int main()
{
fin >> n;
for(int i=2;i<=n;i++)
{
int p;
fin >> p;
adj[p].push_back(i);
}
for(int i=1;i<=n;i++)
{
fin >> a[i];
}
dfs(1);
fout << res;
}