Cod sursa(job #2089723)

Utilizator alexandra_paticaAndreea Alexandra Patica alexandra_patica Data 17 decembrie 2017 00:04:29
Problema Dosare Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.89 kb
#include <cstdio>
#include <vector>
#include <cstring>
#include <algorithm>
using namespace std;
int n, x, i, j, k;
long long viz[16002];
long long nr[16002], s;
vector<int>G[16001];
int cmp (long long a, long long b)
{
    return (a>b);
}
long long dfs (int x)
{
    long long y=0, k=0, Y=0;
    long long v[16002];
    for (int i=0; i<G[x].size(); i++){
        y=dfs(G[x][i]);
        nr[x]+=y;
        v[++k]=y;
    }
    sort(v+1, v+k+1, cmp);
    for (int i=1; i<=k; i++){
        s+=v[i]*i;
    }
    nr[x]+=viz[x];
    return nr[x];
}

int main ()
{
    freopen("dosare.in", "r", stdin);
    freopen("dosare.out", "w", stdout);

    scanf("%lld", &n);
    for (i=2; i<=n; i++){
        scanf("%d", &x);
        G[x].push_back(i);
    }
    for (i=1; i<=n; i++)
        scanf("lld", &viz[i]);

    x=dfs(1);
    s+=x;
    printf("%lld",s);
    return 0;
}