Cod sursa(job #2496407)

Utilizator YetoAdrian Tonica Yeto Data 20 noiembrie 2019 20:20:04
Problema Dosare Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.83 kb
#include <fstream>
#include <algorithm>
#include <vector>
using namespace std;
int n, i, x;
bool viz[16001];
long long d[16001], cost[16001];
vector <int> g[16001];
ifstream fin ("dosare.in");
ofstream fout ("dosare.out");

int cmp (int x, int y)
{
    return cost[x]>cost[y];
}

void dfs (int s)
{
    int v, i;
    viz[s]=1;
    for (i=0;i<g[s].size();i++) {
        v=g[s][i];
        if (viz[v]==0)
            dfs(v);
        cost[s]+=cost[v];
    }
    d[s]=cost[s];
    sort (g[s].begin(), g[s].end(), cmp);
    for (i=0;i<g[s].size();i++) {
        v=g[s][i];
        d[s]+=i*cost[v]+d[v];
    }
}

int main () {
    fin>>n;
    for (i=2;i<=n;i++) {
        fin>>x;
        g[x].push_back(i);
    }
    for (i=1;i<=n;i++) {
        fin>>cost[i];
    }
    dfs(1);
    fout<<d[1];
    return 0;
}