Cod sursa(job #2915861)

Utilizator euyoTukanul euyo Data 25 iulie 2022 15:11:18
Problema Dosare Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.8 kb
#include <bits/stdc++.h>

using namespace std;

using ll = long long;

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

const int MAXN = 16005;

vector<int> G[MAXN];
ll coef[MAXN], res;

void dfs( int u ) {
  vector<ll> son_coef;
  for ( auto v : G[u] ) {
    dfs(v);
    coef[u] += coef[v];
	son_coef.push_back( coef[v] );
  } 
  sort( son_coef.rbegin(), son_coef.rend() );
  int idx = 0;
  for ( auto son : son_coef ) {
	res += son * idx;
	++idx;
  }
  res += coef[u];
}

int main() {
  int n, u;

  fin >> n;
  for ( int i = 2; i <= n; ++i ) {
	fin >> u;
	G[u].push_back(i);
  }
  for ( int i = 1; i <= n; ++i ) {
	fin >> coef[i];
  }
  dfs(1);
  // for ( int i = 1; i <= n; ++i ) {
	// cout << coef[i] << " ";
  // }
  // cout << "\n" << res;
  fout << res;
  fin.close();
  fout.close();
  return 0;
}