Cod sursa(job #2954259)

Utilizator Zed1YasuoAlex Birsan Zed1Yasuo Data 13 decembrie 2022 18:13:24
Problema Dosare Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.8 kb
#include <fstream>
#include <algorithm>
#include <vector>
using namespace std;
ifstream f("dosare.in");
ofstream g("dosare.out");
int n,x;
vector<int>a[16003];
long long dist[16003],val[16003];
bool comp(int X,int Y)
{
    return val[X]>val[Y];
}
void dfs(int nod)
{
    for(int i=0;i<a[nod].size();i++)
    {
        int fiu=a[nod][i];
        dfs(fiu);
        val[nod]+=val[fiu];
    }
    int k=0;
    dist[nod]=val[nod];
    sort(a[nod].begin(),a[nod].end(),comp);
    for (int i=0;i<a[nod].size();i++)
        dist[nod]=dist[nod]+dist[a[nod][i]]+i*val[a[nod][i]];
}
int main()
{
    f>>n;
    for(int i=2;i<=n;i++)
    {
        f>>x;
        a[x].push_back(i);
    }
    for(int i=1;i<=n;i++)
    {
        f>>val[i];
    }
    dfs(1);
    g<<dist[1];
    return 0;
}