Pagini recente » Cod sursa (job #1700652) | Cod sursa (job #361288) | Cod sursa (job #2315488) | Cod sursa (job #2230929) | Cod sursa (job #2020972)
#include <bits/stdc++.h>
using namespace std;
ifstream fi ("dosare.in");
ofstream fo ("dosare.out");
int p[16001], uk[16001];
vector <int> k[16001];
vector <long long> vs;
long long acc[16001];
bool cmp(long long a, long long b){
return a > b;
}
int main()
{
long long T;
int n, i, j;
ios::sync_with_stdio(false);
fi >> n;
for(i = 2; i <= n; i++){
fi >> p[i];
k[p[i]].push_back(i);
uk[p[i]]++;
}
T = 0;
for(i = 1; i <= n; i++)
fi >> acc[i];
while(uk[1] != -1000)
for(i = 1; i <= n; i++)
if(uk[i] == 0){
if(k[i].size() > 0){
for(j = 0; j < k[i].size(); j++){
acc[i] += acc[k[i][j]];
vs.push_back(acc[k[i][j]]);
}
sort(vs.begin(), vs.end(), cmp);
for(j = 0; j < vs.size(); j++)
T += j * vs[j];//numerotam mutarile
vs.clear();
}
T += acc[i];//numaram enterurile
uk[p[i]] --;
uk[i] = -1000;
}
fo << T;
return 0;
}