Cod sursa(job #2071051)

Utilizator NicolaalexandraNicola Alexandra Mihaela Nicolaalexandra Data 20 noiembrie 2017 09:59:51
Problema Dosare Scor 70
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.84 kb
#include <fstream>
#include <algorithm>
#include <vector>
#define DIM 16002
using namespace std;

ifstream fin ("dosare.in");
ofstream fout ("dosare.out");
int n,i,x;
int d[DIM],v[DIM],w[DIM],f[DIM];
vector <int> L[DIM];
void dfs (int nod){
    for (int i=0;i<L[nod].size();i++){
        int vecin = L[nod][i];
        dfs (vecin);
    }
    v[nod] = f[nod];
    int m = L[nod].size();
    for (int i=0;i<m;i++){
        d[nod] += d[L[nod][i]];
        w[i] = v[L[nod][i]];
        v[nod] += v[L[nod][i]];
    }
    sort (w,w+m);
    for (int i=m-1;i>=0;i--){
        d[nod] += w[i] * (m-i-1);
    }
    d[nod] += v[nod];
}

int main (){

    fin>>n;
    for (i=2;i<=n;i++){
        fin>>x;
        L[x].push_back (i);
    }
    for (i=1;i<=n;i++)
        fin>>f[i];
    dfs (1);
    fout<<d[1];

    return 0;
}