Cod sursa(job #2089661)

Utilizator alexandra_paticaAndreea Alexandra Patica alexandra_patica Data 16 decembrie 2017 22:00:59
Problema Dosare Scor 50
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.1 kb
#include <cstdio>
#include <vector>
#include <cstring>
#include <algorithm>
using namespace std;
int n, x, i, j, a[16002], aux, k;
long long nr[16002], s, v[16002];
int cmp (long long a, long long b)
{
    return (a>b);
}
int main ()
{
    freopen("dosare.in", "r", stdin);
    freopen("dosare.out", "w", stdout);

    scanf("%d", &n);
    a[1]=0;
    for (i=2; i<=n; i++){
        scanf("%d", &a[i]);
    }

    for (i=1; i<=n; i++){
        scanf("%d", &x);
        aux=a[i];
        nr[i]+=x;
//        printf("%d %d\n", i, nr[i]);
        while (aux){
            nr[aux]+=x;
//            printf("%d %d\n", aux, nr[aux]);
            aux=a[aux];
        }
//        printf("\n");
    }
//    for (i=1; i<=n; i++) printf("%d ", nr[i]);
//    printf("\n");
    for (i=0; i<n; i++){
        k=0;
        for (j=1; j<=n; j++){
            if (a[j]==i) v[++k]=nr[j];
        }
        sort(v+1, v+k+1, cmp);
        for (j=1; j<=k; j++)
            s=s+(v[j]*j);
    }
//    for (i=1; i<=n; i++) printf("%d ", nr[i]);
//    printf("\n");
    printf("%lld", s);
    return 0;
}