Cod sursa(job #175787)

Utilizator bogdanhm999Casu-Pop Bogdan bogdanhm999 Data 10 aprilie 2008 13:28:34
Problema Dosare Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.74 kb
#include <stdio.h>
#include <vector>
#include <algorithm>

using namespace std;
long n,i,x;
long long sol,a[16001],aux[16001];
vector <long>v[16001];

void DF(long x){
     int i,l=v[x].size();
     for (i=0;i<l;i++)
         DF(v[x][i]);
     for (i=0;i<l;i++)
         aux[i]=a[v[x][i]];
     sort(aux,aux+l);
     for (i=l-1;i>=0;i--){
         sol+=i*aux[l-i-1];
         a[x]+=aux[i];
     }
     sol+=a[x];
}

int main(){
    freopen("dosare.in","r",stdin);
    freopen("dosare.out","w",stdout);
    
    scanf("%ld",&n);
    for (i=2;i<=n;i++){
        scanf("%ld",&x);
        v[x].push_back(i);
    }
    for (i=1;i<=n;i++)scanf("%ld",&a[i]);
    
    DF(1);
    
    printf("%lld\n",sol);

return 0;
}