Cod sursa(job #3205617)

Utilizator Robert_MitriRobert Mitri Robert_Mitri Data 20 februarie 2024 11:32:33
Problema Dosare Scor 70
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.77 kb
#include <fstream>
#include <vector>
#include <algorithm>
using namespace std;
ifstream fin("dosare.in");
ofstream fout("dosare.out");

int n;
const int nmax = 16000;

vector <int> v[nmax + 5];
int k[nmax + 5];
int d[nmax + 5];

long long sol;

void df(int nod)
{
    for(auto& i : v[nod])
        df(i),d[nod]+=d[i];
    sort(v[nod].begin(),v[nod].end(),[](int a,int b){return d[a]>d[b];});
}
void dfs(int nod)
{
    for(int i = 0 ;i<v[nod].size();i++)
    {
        sol += (i+1)*d[v[nod][i]];
        dfs(v[nod][i]);
    }
}


int main()
{
    fin>>n;
    for(int i=2;i<=n;i++)
    {
        int x;
        fin>>x;
        v[x].push_back(i);
    }
    for(int i=1;i<=n;i++)
        fin>>d[i];
    df(1);
    dfs(1);
    fout<<sol + d[1];

}