Cod sursa(job #2030593)

Utilizator Liviu_Ionut_MoantaMoanta Ionut Liviu Liviu_Ionut_Moanta Data 1 octombrie 2017 20:03:28
Problema Dosare Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.84 kb
#include<fstream>
#include<vector>
#include<algorithm>
using namespace std;
int n,i,a;
int f[16005];
long long sol[16005],v[16005],q[16005];
vector<int>L[16005];
ifstream fin("dosare.in");
ofstream fout("dosare.out");
void dfs(int nod){
    for(int i=0;i<L[nod].size();i++){
        int fiu=L[nod][i];
        dfs(fiu);
    }
    q[nod]=f[nod];
    for(int i=0;i<L[nod].size();i++){
        int fiu=L[nod][i];
        sol[nod]+=sol[fiu];
        v[i]=q[fiu];
        q[nod]+=q[fiu];
    }
    int k=L[nod].size();
    sort(v,v+k);
    for(int i=0;i<k;i++){
        sol[nod]+=v[i]*(k-i-1);
    }
    sol[nod]+=q[nod];
}
int main(){
    fin>>n;
    for(i=2;i<=n;i++){
        fin>>a;
        L[a].push_back(i);
    }
    for(i=1;i<=n;i++){
        fin>>f[i];
    }
    dfs(1);
    fout<<sol[1]<<"\n";
    return 0;
}