Cod sursa(job #328525)

Utilizator Magnuscont cu nume gresit sau fals Magnus Data 2 iulie 2009 13:15:53
Problema Dosare Scor 30
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.83 kb
#include <stdio.h>   
#include <vector>   
#include <algorithm>   
  
using namespace std;   
long n,i,x;   
long long sol,a[161],aux[161];
vector <long>v[161];
  
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;   
}