Pagini recente » Cod sursa (job #1863118) | Cod sursa (job #2101333) | Cod sursa (job #318489) | Cod sursa (job #1214230) | Cod sursa (job #457341)
Cod sursa(job #457341)
#include <algorithm>
#include <vector>
using namespace std;
#define pb push_back
#define DIM 16005
vector <long long> fii;
vector <int> g[DIM];
long long cnt[DIM];
long long nrt;
int n;
void read ()
{
int i,x;
scanf ("%d",&n);
for (i=2; i<=n; ++i)
{
scanf ("%d",&x);
g[x].pb (i);
}
for (i=1; i<=n; ++i)
scanf ("%d",&cnt[i]);
}
void df (int nod)
{
vector <int> :: iterator it;
int i;
for (it=g[nod].begin (); it!=g[nod].end (); ++it)
df (*it);
fii.clear ();
for (it=g[nod].begin (); it!=g[nod].end (); ++it)
{
cnt[nod]+=cnt[*it];
fii.pb (cnt[*it]);
}
nrt+=cnt[nod];
sort (fii.rbegin (),fii.rend ());
for (i=0; i<(int)fii.size (); ++i)
nrt+=i*fii[i];
}
int main ()
{
freopen ("dosare.in","r",stdin);
freopen ("dosare.out","w",stdout);
read ();
df (1);
printf ("%lld",nrt);
return 0;
}