Cod sursa(job #2030018)

Utilizator RaduXD1Nicolae Radu RaduXD1 Data 30 septembrie 2017 21:15:58
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;
ifstream fin("dosare.in");
ofstream fout("dosare.out");
vector<int> v[16002];
vector<long long> t[16002];
long long d[16002],a[16002];
long long i,n,x,y,k,tata,j,nr,nod,sum;

void dfs(int nod)
{
    int i,vecin;
    d[nod]=a[nod];
    for(i=0;i<v[nod].size();i++)
    {
        vecin=v[nod][i];
        dfs(vecin);
        d[nod]+=d[vecin];
        t[nod].push_back(d[vecin]);
    }
    sort(t[nod].begin(), t[nod].end() );
    for(i=0;i<t[nod].size();i++)
    {
        sum+=t[nod][i]*(t[nod].size()-i);
    }
}

int main(){
    fin>>n;
    for(i=2;i<=n;i++)
    {
        fin>>tata;
        v[tata].push_back(i);
    }
    for(i=1;i<=n;i++)
        fin>>a[i];
    dfs(1);
    fout<<sum+d[1];
    fin.close();
    fout.close();
    return 0;
}