Cod sursa(job #1798958)

Utilizator iulianrotaruRotaru Gheorghe-Iulian iulianrotaru Data 5 noiembrie 2016 16:55:12
Problema Dosare Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.67 kb
#include<bits/stdc++.h>
using namespace std;
ifstream f("dosare.in");
ofstream g("dosare.out");
int n,i,x;
long long d[1<<14],e[1<<14];
vector<int> v[1<<14];
void dfs(int nod)
{
    int i,m=v[nod].size();
    vector <long long>w;
    for(i=0;i<m;i++)
    {
        int X=v[nod][i];
        dfs(X);
        d[nod]+=d[X];
        w.push_back(e[X]);
        e[nod]+=e[X];
    }
    sort(w.begin(),w.end());
    for(i=m-1;i>=0;i--)
        d[nod]+=w[i]*(m-i-1);
    d[nod]+=e[nod];
}
int main()
{
    f>>n;
    for(i=2;i<=n;i++)
    {
        f>>x;
        v[x].push_back(i);
    }
    for(i=1;i<=n;i++) f>>e[i];
    dfs(1);
    g<<d[1];
    return 0;
}