Cod sursa(job #3240692)

Utilizator paull122Paul Ion paull122 Data 20 august 2024 12:55:21
Problema Dosare Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.85 kb
#include <bits/stdc++.h>

#define VMAX 100
#define NMAX 16000
#define LOG 21
#define INF (int)(10e9)
#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 a[NMAX+1],res;

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

void dfs(int x)
{

    for(int i : adj[x])
    {
        dfs(i);
        a[x] += a[i];
    }
    sort(adj[x].begin(),adj[x].end(),cmp);
    res += a[x];
    int k=0;
    for(int i : adj[x])
    {
        res += k * 1ll * a[i];
        ++k;
    }

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