Cod sursa(job #3240552)

Utilizator paull122Paul Ion paull122 Data 16 august 2024 15:34:48
Problema Dosare Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.9 kb
#include <bits/stdc++.h>

#define VMAX 100
#define NMAX 16000
#define LOG 21
#define INF (int)(10e8)
#define MOD 4001
#define ll   long long int


#define NIL 0

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

int n;
vector<int> adj[NMAX+1];
ll dp[NMAX+1],a[NMAX+1];
ll res=0;


bool cmp(int x,int y)
{
    return dp[x] > dp[y];
}
void dfs(int x)
{
    dp[x]=a[x];
    for(int i : adj[x])
    {
        dfs(i);
        dp[x] += dp[i];
    }
    sort(adj[x].begin(),adj[x].end(),cmp);

    int k=1;
    res += a[x];
    for(int i : adj[x])
    {
        res = res + k * 1ll *  dp[i];
        ++k;
    }

}

int main()
{
    cin >> n;
    for(int i=2;i<=n;i++)
    {
        int p;
        cin >> p;
        adj[p].push_back(i);
    }
    for(int i=1;i<=n;i++)
    {
        cin >> a[i];
    }
    dfs(1);
    cout << res;

}