Cod sursa(job #2648187)

Utilizator lucametehauDart Monkey lucametehau Data 9 septembrie 2020 12:38:45
Problema Dosare Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.66 kb
#include <bits/stdc++.h>

using namespace std;

ifstream in ("dosare.in");
ofstream out ("dosare.out");

int n, x;

vector <int> g[16005];
long long v[16005], dp[16005];

bool comp(int a, int b) {
  return v[a] > v[b];
}

void dfs(int nod) {
  for(auto &fiu : g[nod]) {
    dfs(fiu);
    v[nod] += v[fiu];
  }
  dp[nod] = v[nod];
  sort(g[nod].begin(), g[nod].end(), comp);
  int ind = 0;
  for(auto &fiu : g[nod])
    dp[nod] += dp[fiu] + v[fiu] * ind, ind++;
}

int main() {
  in >> n;
  for(int i = 1; i < n; i++)
    in >> x, g[x].push_back(i + 1);
  for(int i = 1; i <= n; i++)
    in >> v[i];
  dfs(1);
  out << dp[1];
  return 0;
}