Cod sursa(job #2973832)

Utilizator dobreraduDobre Radu Fabian dobreradu Data 2 februarie 2023 12:44:00
Problema Dosare Scor 70
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.85 kb
#include <bits/stdc++.h>

using namespace std;
ifstream in("dosare.in");
ofstream out("dosare.out");
const int NMAX = 16002;
int cost[NMAX], d[NMAX], viz[NMAX];
int maxlevel;
vector <int> v[NMAX];
bool cmp( int a, int b ){
    return cost[a] > cost[b];
}
void dfs( int nod ){
    for( int i = 0 ; i < v[nod].size(); i++ ){
        if( !viz[v[nod][i]] )
            dfs(v[nod][i]);
        cost[nod] += cost[v[nod][i]];
    }
    d[nod] = cost[nod];
    sort( v[nod].begin(), v[nod].end(), cmp);
    for( int i = 0 ; i < v[nod].size(); i++ )
        d[nod] += i * cost[v[nod][i]] + d[v[nod][i]];
}
int main()
{
    int n, tata;
    in >> n;
    for( int i = 2 ; i <= n ; i++ ){
        in >> tata;
        v[tata].push_back(i);
    }
    for( int i = 1; i <= n ; i++ )
        in >> cost[i];
    dfs(1);
    out << d[1];
    return 0;
}