Cod sursa(job #1798954)

Utilizator iulianrotaruRotaru Gheorghe-Iulian iulianrotaru Data 5 noiembrie 2016 16:49:14
Problema Dosare Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.63 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],w[1<<14];
vector<int> v[1<<14];
void dfs(int nod)
{
    int i,x,m=v[nod].size();
    for(i=0;i<m;i++)
    {
        x=v[nod][i];
        dfs(x);
        d[nod]+=d[x];
        w[i]=e[x];
        e[nod]+=e[x];
    }
    sort(w,w+m);
    for(i=m-1;i>=0;i--)
        d[nod]+=w[i]*(m-i-1);
    d[nod]+=e[nod];
}
int main()
{
    f>>n;
    for(i=1;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;
}