Cod sursa(job #1390576)

Utilizator Athena99Anghel Anca Athena99 Data 17 martie 2015 09:45:24
Problema Dosare Scor 70
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.83 kb
#include <algorithm>
#include <fstream>
#include <vector>

using namespace std;

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

const int nmax= 16000;

int sol= 0, v[nmax+1];

vector <int> g[nmax+1];

void dfs( int x ) {
    vector <int> o;
    for ( vector <int>::iterator it= g[x].begin(); it!=g[x].end(); ++it ) {
        dfs(*it);
        v[x]+= v[*it];
        o.push_back(v[*it]);
    }
    sort( o.begin(), o.end() ) ;

    sol+= v[x];
    for ( int i= (int)o.size()-1; i>=0; --i ) {
        sol= sol+((int)o.size()-1-i)*o[i];
    }
}

int main(  ) {
    int n;
    fin>>n;
    for ( int i= 2; i<=n; ++i ) {
        int x;
        fin>>x;
        g[x].push_back(i);
    }
    for ( int i= 1; i<=n; ++i ) {
        fin>>v[i];
    }

    dfs(1);

    fout<<sol<<"\n";

    return 0;
}