Cod sursa(job #1001084)

Utilizator DaNutZ2UuUUBB Bora Dan DaNutZ2UuU Data 24 septembrie 2013 14:39:34
Problema Dosare Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.94 kb
#include <iostream>
#include <fstream>
#include <vector>
#include <algorithm>
using namespace std;
 
#define MAXN 16010
 
ifstream f("dosare.in");
ofstream g("dosare.out");
 
int n;
vector<int> G[MAXN];
long long a[MAXN];
long long solutie;
 
inline bool cmp(int x, int y) {
    return a[x] > a[y];
}
 
void DFS(int nd) {
 
    for (int i = 0; i < G[nd].size(); i++) {
        DFS(G[nd][i]);
        a[nd] += a[G[nd][i]];
    }
 
    sort(G[nd].begin(), G[nd].end(), cmp);
 
}
 
void DFS2(int nd) {
 
    for (int i = 0; i < G[nd].size(); i++) {
        solutie += (long long) (i + 1) * a[G[nd][i]];
        DFS2(G[nd][i]);
    }
 
}
 
int main()
{
 
    f >> n;
 
    for(int i = 2; i <= n; i++) {
        int x;
        f >> x;
        G[x].push_back(i);
    }
 
    for(int i = 1;i <= n; i++)
        f >> a[i];
 
    DFS(1);
    solutie += a[1];
    DFS2(1);
 
    g << solutie;
 
    return 0;
}